27. maj 2008 - 16:40
Der er
6 kommentarer og 1 løsning
Overgive flere parametre til procedure?
Hej, jeg har en procedure i en klasse: procedure Download(Sender: TObject); I klassens constructor opretter jeg en ComboBox, og sætter dennes OnSelect event til: OnSelect := Download; Når OnSelect proceduren bliver fyret af, bliver Sender selvfølgelig overgivet. Mit spørgsmål går på, hvordan jeg kan overgive flere parametre end bare Sender. Det går åbenbart ikke bare at tilføje flere parametre som normalt. Hvordan gøres dette?? Tak på forhånd!
Annonceindlæg tema
nca
Juniormester
27. maj 2008 - 20:15
#1
Her er et lille eksempel på, hvorledes du kan lave procedurer med parametre i. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); Procedure VisMeddelelse(Msg: String); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} Procedure TForm1.VisMeddelelse(Msg:String); begin ShowMessage(Msg); end; procedure TForm1.Button1Click(Sender: TObject); begin VisMeddelelse('Dette er en test'); end; end. Du skal huse at sætte parameter ind i dir procedurehoved og ogs ideklarationen af proceduren. Iøvrigt bør et spørgsmål af denne art ikke sættes til mere end 15 point
Prøv at oprette Button1 dynamisk, og så tildele dens OnClick en procedure med parametren Msg: String. Den går vist ikke. Jeg ønsker ikke at kalde en procedure fra en procedure, men direkte fra knappens OnClick. Nu som før 150 point, da jeg har læst andedsteds på nettet, at det ikke kan lade sig gøre (hvilket jeg dog ikke kan tro).
nca
Juniormester
27. maj 2008 - 21:20
#3
OK, jeg har misforstået dit spørgsmål, så jeg står af.
Du kan lave din egen klasse som extender Tnoget og som udover parent info også har din message. Eksempel med TButton: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type ExtraButton = class(TButton) public msg : string; end; TForm1 = class(TForm) Button1 : TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private Button2 : ExtraButton; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage('Jeg er helt standard'); end; procedure TForm1.Button2Click(Sender: TObject); begin ShowMessage('Jeg er speciel ' + ExtraButton(sender).msg); end; procedure TForm1.FormCreate(Sender: TObject); var e : TNotifyEvent; begin Button2 := ExtraButton.Create(Self); Button2.Parent := Self; Button2.Left := 100; Button2.Top := 100; Button2.Caption := 'Special'; Button2.Visible := true; Button2.Enabled := true; Button2.OnClick := Button2Click; Button2.msg := '(med en message)'; end; end.
-> nca, det var vist heller ikke den bedste beskrivelse, jeg var kommet med... arne, jeg proever din ide senere, da jeg arbejder paa noget andet for tiden. Tak begge to indtil videre.
Jeg ende med at lade de dynamisk oprettede Buttons koere min procedure Download(Sender: TObject); som tidligere. Fra denne procedure bliver saa en ny procedure kaldt, og de forskellige parametre overgivet alt efter hvilken Sender, der har kald procedure Download(Sender: TObject); arne, laeg et svar, saa deler vi point, da jeg har laert noget af dit eksempel, som jeg helt sikkert kan bruge i fremtiden. Tak for hjaelpen!
Kurser inden for grundlæggende programmering