Avatar billede js_delphi Nybegynder
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!
Avatar billede 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
Avatar billede js_delphi Nybegynder
27. maj 2008 - 20:36 #2
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).
Avatar billede nca Juniormester
27. maj 2008 - 21:20 #3
OK, jeg har misforstået dit spørgsmål, så jeg står af.
Avatar billede arne_v Ekspert
28. maj 2008 - 04:20 #4
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.
Avatar billede js_delphi Nybegynder
28. maj 2008 - 08:51 #5
-> 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.
Avatar billede js_delphi Nybegynder
08. juni 2008 - 19:00 #6
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!
Avatar billede arne_v Ekspert
08. juni 2008 - 20:11 #7
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester