Og i VB gør jeg det sådan at jeg tjekker på navnet af knappen. Hvis en knap har det-og-det navn kører den følgende rutine (og evt. ændrer knappens navn, så næste gang den bliver trykket ned udfører den en anden funktion)
En buttons OnClick event vil have en porcedure alla den her :
TForm1.ButtonClick(Sender : TObject);
fidusen er så at i din sender variabel har du den knap der har kaldt dit event ...
prøv fx det her :
procedure TForm1.Button1Click(Sender: TObject); var Button : TButton; begin Button := TButton.Create(Form1); with Button do begin Left := 10; Top := 10; OnClick := ButtonClick; Caption := \'HEST\'; end; InsertControl(Button); end;
procedure TForm1.ButtonClick(Sender: TObject); begin with (Sender as TButton) do ShowMessage(Caption); end;
Din OnClick event har en \"Sender\" som er en \"pointer\" til den der sender meddelelsen og det vil i dette tilfælde sige \"den knap\" er blev trykket på.
Har jeg forstået det rigtigt, hvis jeg tror at det du vil, er at have en masse knapper på dit window som alle kalder EN metode, således at der mere eller mindre udføres den samme handling for alle knapper - Forskellen er måske bare hvilken variabel der tælles op i et array?
I så tilfælde vil di onClick metode have en parameter du kan bruge. (Jeg mener at den heder Sender og er af typen TObject).
Du har flere muligheder:
Procedure ButtonClick(Sender :; TObject); Begin If Sender = Button1 Then ....; If Sender = Button2 Then ....; End;
Noget spazzet metode.
Andet forslag, og noget smartere.
Alle dine buttons har en property kaldet tag. Sæt denne tag med en unik værdi for hver button, alá:
For i := 0 to MaxNo button[i].tag := i;
Skriv så i din button click metode (som alle din buttons onClick event peger på):
Procedure ButtonClick(Sender :; TObject); Var ButNo : Integer; Begin ButNo := (Sender As TButton).Tag;
Tabel[ButNo] := Tabel[ButNo] + 1; End;
Tabel[] er her en array hvor hvert element tælles en op for hvergang en button trykkes.
Bemærk at det her er AS operatoren der er spændende - slå den op i hjælpen med F1.
Borris>> du opretter en button i din button click.... du mener vel i din FormCreate, ik? (og hvor egentligt lave knapperne under runtime? - bare fordi man kan, eller hva\'?)
Det er lidt dumt at søge på sender\'s name eller caption properties, alene af den grund at disse (ihvert fald captionen) kan ændres, hvis applikationen benyttes på forskellige sprog. Desuden giver det en masse nestede IF sætninger. Jeg foretrækker metoden med at give knappernes tag property en værdi og så teste på den. Det er hurtigere og sikrere og så er det iøvrigt derfor Borland gav alle controls en tag property - men hver mand sin lyst.
borrisholt> Det er sgu da derfor min InterBase driller mig lidt. Der er ingen HEST\'e med.
dino-cip> sender er en pointer der peger på afsenderen og som hvis du gør som flg: \"if (sender AS TBUTTON).Caption = \'\' then bla.bla.bla.\" men jeg ville i stedet bruge pointeren direkte
Borris>> HEST er et, efter min erfaring, noget overdrevet fænomen i forbindelse med Delphi programmering. Jeg får faktisk en del bedre resultater, hvis jeg undelader mere eller mindre tilfældig brug af begrebet HEST i min kode - om ikke andet, så er min compiler mere tilbøjeligt til at æde koden uden kedelige fejl og advarsler. Har man tilbøjelighed til at placere mere eller mindre relevante samlinger af tegn og bogstaver i sin kode, så vil jeg anbefale at man benytter tegner \';\' (semikolon), idet compileren ikke ser ud til at have så meget imode dette tegn, evt i en serie som fx. \';;;;\', som den har imod HEST.
Sålænge button er et array så er det vel hip-som-hap om man gør det ene eller det andet (tag eller pointeren) da man bare kan bruge arrayet.
HEST eller ikke-HEST; jeg mindes stadig den dag hvor kunden undrede sig over at der lige pludslig stor \"HUGO\" midt på skærmen og at en programmør blev rød i hovedet.
Forøvrigt, på et noget mere personligt plan, kan jeg sige, at nu er jeg nok lidt væk de næste 14 dag. Jeg har valgt mig et nyt firma at arbejde i. Danfoss blev lidt for meget efter 14 år...
Delphi
Synes godt om
Ny brugerNybegynder
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.