Avatar billede morten_s Nybegynder
17. september 2001 - 23:17 Der er 8 kommentarer og
2 løsninger

sæt OnClick event runtime

Jeg allokere et antal speedbuttons under runtime, mit problem er at jeg gerne vil have speedbuttons onClick event til at pege på en procedure, hvordan sætter jeg den ?
Avatar billede lectoc Nybegynder
18. september 2001 - 07:45 #1
Du definerer dig en procedure i din form-klasse, der har samme signatur som den event-type, det drejer sig om, fx:
 
  TForm1 = class(TForm)
  private
    procedure BtnClick(Sender: TObject);

Et sted i koden sætter du så bare dine knappers OnClick til at pege på denne metode:

  button1.OnClick:= BtnClick;

I BtnClick kan du så - via Sender - afgøre hvilken knap, der er trykket på.

/Torben.
Avatar billede morten_s Nybegynder
18. september 2001 - 08:02 #2
Torben> Giver dit eks. incompatible typer når der compileres.

Avatar billede morten_s Nybegynder
18. september 2001 - 08:02 #3
Der sku\' ha\' stået:

Torben> Dit eks. giver incompatible typer når der compileres.
Avatar billede borrisholt Novice
18. september 2001 - 08:06 #4
Det her virker :

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
  private
    procedure ButtonClick(Sender: TObject);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ButtonClick(Sender: TObject);
begin
  ShowMessage(\'Hello World\');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Button1.OnClick := ButtonClick;
end;

Og er testet.

Jens B
Avatar billede morten_s Nybegynder
18. september 2001 - 08:13 #5
Jens>> Jep det virker, nu skal der bare findes ud af hvor clickket kom fra
Avatar billede lectoc Nybegynder
18. september 2001 - 08:14 #6
Og hvad er lige den store forskel??? (bortset fra navnet på metoden, hvilket er ligemeget...).

morten_s> du må have lavet en fejl, da du tastede det ind - det virker altså! Jeg skrev dog ikke hele koden....

Jeg har lige copy\'et den kode jeg angav ind i et Delphi-program - og det virker!! Det er meget nok, at man får afvist et svar, der rent faktisk virker.

/Torben.
Avatar billede borrisholt Novice
18. september 2001 - 08:17 #7
som torben så ganske rigtigt siger så ligger der en Pointer til kanppen CLicket kommer fra i sender.

Jens B
Avatar billede morten_s Nybegynder
18. september 2001 - 08:19 #8
rolig rolig, i kan jo dele pointene hvis du giver et svar
Avatar billede lectoc Nybegynder
18. september 2001 - 08:25 #9
Jeg er meget rolig - måske skulle du også være rolig, og vente med at afvise et svar til du er sikker på, det ikke er dig selv, der har lavet en fejl. Det er vel ikke meningen, at man skal svare med et komplet compilerbart og fuldt funktionelt program?

/Torben.
Avatar billede borrisholt Novice
18. september 2001 - 08:27 #10
Jeg vrisser ikke jeg synes bare spørgsmålet var besvarer :-)

Anyway Sæt tre kanpper på den form Og skriv det følgende :

procedure TForm1.FormCreate(Sender: TObject);
begin
  Button1.OnClick := ButtonClick;
  Button2.OnClick := ButtonClick;
  Button3.OnClick := ButtonClick;
end;


procedure TForm1.ButtonClick(Sender: TObject);
begin
  If not (Sender is TButton) then
    exit;
  //Sikkerheds tjek på ikke en eller anden sjovert har stoppet
  //noget andet end en knap ind i Sender. En Hest måske ?
  if TButton(Sender) = Button1 then
  begin
    ShowMessage(\'Button1\');
  end
  else if TButton(Sender) = Button2 then
  begin
    ShowMessage(\'Button2\');
  end
  else if TButton(Sender) = Button3 then
  begin
    ShowMessage(\'Button3\');
  end;
end;


Giv Pointsne til Motten_s i det jeg etenlig blot har uddybet han svar :-)

Jens B
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