Delphi 7 Probléma a sender osztály mire való?
Nem osztály lesz az, nem arra gondolsz, hogy eljárásokban szerepel a sender: tobject paraméter?
Ebben az esetben például meg tudod állapítani, hogy milyen objektum hívta az adott eljárást.
Például itt egy strigulázó program egy része (igaz ez Lazarus/ Free Pascal)
unit strigulamain;
{$mode objfpc}{$H+}
interface
uses
heaptrc, Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, Menus, ExtCtrls, Beallit;
type
{ TStrigulazForm }
TStrigulazForm = class(TForm)
FoMenu: TMainMenu;
FajlMenu: TMenuItem;
FajlBetolt: TMenuItem;
FajlMent: TMenuItem;
FajlValaszto: TMenuItem;
FajlKilep: TMenuItem;
Kategoriak: TMenuItem;
FajlUj: TMenuItem;
KategoriaLetrehoz: TMenuItem;
GyorsMentes: TMenuItem;
StrigulaToltDlg: TOpenDialog;
StrigulaMentDlg: TSaveDialog;
AutoSave: TTimer;
procedure AutoSaveTimer(Sender: TObject);
procedure BeallitasokClick(Sender: TObject);
procedure FajlBetoltClick(Sender: TObject);
procedure FajlKilepClick(Sender: TObject);
procedure FajlMentClick(Sender: TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure GyorsMentesClick(Sender: TObject);
procedure LetrehozasClick(Sender: TObject);
procedure ButtonPClick(Sender: TObject);
procedure ButtonMClick(Sender: TObject);
private
{ private declarations }
FajlNev: String;
public
{ public declarations }
end;
var
StrigulazForm: TStrigulazForm;
implementation
{$R strigulamain.lfm}
type Elem=packed record
GroupBox : TGroupBox;
ButtonP : TButton;
ButtonM : TButton;
Edit : TEdit;
Strigula : Longint;
end;
MentesRec=packed Record
Kategoria : string[100];
Strigula : Longint;
end;
var ElemLista : TStringList;
Elemek : array of Elem;
MentesTomb : array of MentesRec;
i : integer;
BoxPos : integer;
Fn : string;
f : file of MentesRec;
function GetFileSize(Path : String):int64;
var Info : TSearchRec;
begin
FindFirst(Path,faAnyFile and faDirectory,Info);
GetFileSize:=Info.Size;
FindClose(Info);
end;
procedure Kilep;
begin
SetLength(Elemek,0);
SetLength(MentesTomb,0);
if FileExists(GetTempDir+'/strigula.tmp') then DeleteFile(GetTempDir+'/strigula.tmp');
StrigulazForm.Close;
end;
procedure takarit;
begin
if Length(Elemek)>0 then
begin
for i:=0 to Length(Elemek)-1 do
begin
with Elemek[i] do
begin
ButtonM.Destroy;
Edit.Destroy;
ButtonP.Destroy;
GroupBox.Destroy;
Strigula:=0;
end;
end;
SetLength(Elemek,0);
end;
BoxPos:=-49;
end;
{ TStrigulazForm }
procedure TStrigulazForm.ButtonPClick(Sender: TObject);
begin
inc(Elemek[(sender as tbutton).tag].Strigula);
inc(MentesTomb[(sender as tbutton).tag].Strigula);
Elemek[(sender as tbutton).tag].Edit.Text:=IntToStr(Elemek[(sender as tbutton).tag].Strigula);
end;
procedure TStrigulazForm.ButtonMClick(Sender: TObject);
begin
dec(Elemek[(sender as tbutton).tag].Strigula);
dec(MentesTomb[(sender as tbutton).tag].Strigula);
Elemek[(sender as tbutton).tag].Edit.Text:=IntToStr(Elemek[(sender as tbutton).tag].Strigula);
end;
procedure TStrigulazForm.FajlKilepClick(Sender: TObject);
begin
Kilep;
end;
procedure TStrigulazForm.FajlMentClick(Sender: TObject);
begin
if Length(MentesTomb)>0 then
begin
if FajlNev='' then
if StrigulaMentDlg.Execute then
begin
Fn:=StrigulaMentDlg.FileName;
FajlNev:=Fn;
end
else Fn:=FajlNev;
if pos(StrigulaMentDlg.DefaultExt,fn)=0 then Fn:=Fn+StrigulaMentDlg.DefaultExt;
AssignFile(f,Fn);
{$i-}
ReWrite(f);
{$i+}
if IoResult<>0 then
ShowMessage('A fájlt nem sikerült elmenteni')
else
begin
for i:=0 to Length(MentesTomb)-1 do
begin
write(f,MentesTomb[i]);
end;
if not ((Sender as TMenuitem).Caption='Gyorsmentés') then
ShowMessage('A fájl mentése megtörtént');
end;
CloseFile(f);
if not AutoSave.Enabled then AutoSave.Enabled:=True;
end
else
ShowMessage('Nincs mit elmenteni!');
end;
procedure TStrigulazForm.FormClose(Sender: TObject;
var CloseAction: TCloseAction);
begin
Kilep;
end;
procedure TStrigulazForm.FormCreate(Sender: TObject);
begin
FajlNev:='';
width:=270;
height:=25;
end;
procedure TStrigulazForm.GyorsMentesClick(Sender: TObject);
begin
FajlMentClick(Sender);
end;
procedure TStrigulazForm.LetrehozasClick(Sender: TObject);
var maximum : integer;
melyik : boolean;
Strigulastr : string;
begin
takarit;
if (FileExists(GetTempDir+'/strigula.tmp')) and (GetFileSize(GetTempDir+'/strigula.tmp')>0) then
begin
ElemLista:=TStringList.Create;
ElemLista.LoadFromFile(GetTempDir+'/strigula.tmp');
SetLength(Elemek,ElemLista.Count);
SetLength(MentesTomb,ElemLista.Count);
Maximum:=ElemLista.Count-1;
Melyik:=false;
end
else
begin
if Length(MentesTomb)<=0 then
begin
ShowMessage('Hiba történt, a program leáll');
halt(1);
end
else
begin
SetLength(Elemek,Length(MentesTomb));
Melyik:=True;
Maximum:=Length(MentesTomb)-1;
end;
end;
for i:=0 to Maximum do
begin
BoxPos:=BoxPos+50;
with Elemek[i] do
begin
Groupbox:=TGroupBox.Create(Self);
with GroupBox do
begin
Parent:=StrigulazForm;
if not melyik then
begin
Caption:=' '+ElemLista.Strings[i]+' ';
MentesTomb[i].Kategoria:=ElemLista.Strings[i];
Strigula:=0;
MentesTomb[i].Strigula:=0;
Strigulastr:='0';
end
else
begin
Caption:=' '+MentesTomb[i].Kategoria+' ';
Strigula:=MentesTomb[i].Strigula;
StrigulaStr:=IntToStr(Strigula);
end;
Height:=45;
Width:=262;
Top:=BoxPos;
Left:=3;
end;
ButtonP:=TButton.Create(Self);
with ButtonP do
begin
Parent:=GroupBox;
Caption:='+';
Width:=30;
Height:=25;
Top:=1;
Left:=3;
Tag:=i;
OnClick:=@ButtonPClick;
end;
Edit:=TEdit.Create(Self);
with Edit do
begin
Parent:=GroupBox;
Text:=StrigulaStr;
Top:=3;
Left:=38;
Height:=23;
Width:=180;
end;
ButtonM:=TButton.Create(Self);
with ButtonM do
begin
Parent:=GroupBox;
Caption:='-';
Width:=30;
Height:=25;
Top:=1;
Left:=223;
Tag:=i;
OnClick:=@ButtonMClick;
end;
end;
end;
if not melyik then ElemLista.Free;
FajlUj.Enabled:=False;
StrigulazForm.Width:=270;
StrigulazForm.Height:=BoxPos+50+20;
end;
procedure TStrigulazForm.BeallitasokClick(Sender: TObject);
begin
BeallitForm.ShowModal;
if (FileExists(GetTempDir+'/strigula.tmp')) and (GetFileSize(GetTempDir+'/strigula.tmp')<>0)then
if Not FajlUj.Enabled then FajlUj.Enabled:=True;
end;
procedure TStrigulazForm.AutoSaveTimer(Sender: TObject);
begin
if FajlNev<>'' then FajlMentClick(Sender);
end;
procedure TStrigulazForm.FajlBetoltClick(Sender: TObject);
Var Hiba : longint;
begin
if Length(MentesTomb)>0 then SetLength(MentesTomb,0);
if FileExists(GetTempDir+'/strigula.tmp') then DeleteFile(GetTempDir+'/strigula.tmp');
if StrigulaToltDlg.Execute then Fn:=StrigulaToltDlg.Filename;
if Fn<>'' then
begin
AssignFile(f,Fn);
{$i-}
Reset(f);
{$i+}
Hiba:=IOResult;
if Hiba<>0 then ShowMessage(IntToStr(Hiba))
else
begin
i:=0;
while Not Eof(f) do
begin
SetLength(MentesTomb,Length(MentesTomb)+1);
Read(f,MentesTomb[i]);
inc(i);
end;
i:=0;
LetrehozasClick(Sender);
FajlNev:=Fn;
if not AutoSave.Enabled then AutoSave.Enabled:=True;
end;
end;
end;
initialization
i:=0;
BoxPos:=-49;
end.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!