Kezdőoldal » Számítástechnika » Programozás » Delphi 7 Probléma a sender...

Delphi 7 Probléma a sender osztály mire való?

Figyelt kérdés
Fent leírtak mire jó a sender osztály és mit csinál.

#programozás. delphi #program. osztály
2014. márc. 19. 10:41
 1/1 ejbenjaro ***** válasza:

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.

2014. márc. 19. 11:47
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!