17. november 2002 - 01:35Der er
4 kommentarer og 3 løsninger
OnClick event på runtime kanpper
Jeg har lavet en stak knapper runtime, og vil gerne have at når man klikker på en af dem skifter den farve, hvordan gør man det ??
min kode indtil nu:
procedure TForm1.Button1Click(Sender: TObject); var Button: TButton; x,y : integer; begin for y := 0 to 2 do begin for x := 0 to 2 do begin Button := TButton.Create(self); Button.Name := 'Pan' + inttostr(x) + 'x' + inttostr(y); Button.Parent := form1; Button.Width := 40; Button.Height := 40; Button.Top := y*40; Button.Left := x*40; end; end; end;
har lige smidt lidt flere point i. Kunne nemlig også god tænke mig at vide hvordan jeg sletter en af de knapper jeg har lavet ? F.eks. hvordan jeg sletter knappen Pan1x1 ??
Uha, det bliver en lang en...: Først skal du lave en procedure procedure TForm1.ButtonClick(Sender: TObject); begin //kode, der skal udføres når du klikke på knappen end; Vær opmærksom på, at proceduren kan hedde hvad du har lyst til, men den skal have én parameter, nemlig Sender: TObject
Derefter skal du sætte din procedure til at være event-handler for OnClick event'en: Button.OnClick:=ButtonClick;
Hvis du vil fjerne den fra din form skal du sætte knappens parent til nil. Det vil nok være en god ide at lave en free på den efterfølgende.
Her har du lidt kode, som kan indsætte nye knapper og slette knappen som du har valgt i din spinedit:
1 start en ny applikation 2 put to TBuuton på, Button1.Caption:= ny knap, Button2.Caption := Slet knap 3 put en Spin edit på din form 4 indsæt nedenstående kode
procedure TForm1.BtnClick(Sender: TObject); var btn: TButton; begin if sender is TButton then begin btn := (Sender as TButton); ShowMessage('Jeg er:'+ btn.Caption); end; end;
procedure TForm1.Button1Click(Sender: TObject); begin with TButton.Create(Form1) do begin Parent:= Form1; Caption:= 'Knap nr: '+IntToStr(KnapNr); Left:= XPos; Top:= YPos; Tag:= KnapNr; OnClick:= BtnClick; end; Inc(KnapNr); XPos := XPos + 20; YPos := YPos + 20; end;
procedure TForm1.Button2Click(Sender: TObject); var btn: TButton; i: Integer; begin i:= 0; while i < ComponentCount do begin if (Components[i] is TButton) then begin btn:= (Components[i] as TButton); if btn.Tag = SpinEdit1.Value then btn.Free; end; inc(i); end; end;
Hvis du vil have den til at skifte farve skal du bruge en bitbtn istedet, brug ovenstående eksempel men placer også et ColorGrid på din form, dine knapper vil nu få ColorGridets Forground color når du klikker på dem
procedure TForm1.BtnClick(Sender: TObject); var btn: TBitBtn; begin if sender is TBitBtn then begin btn := (Sender as TBitBtn); btn.Font.Color:= ColorGrid1.ForegroundColor; ShowMessage('Jeg er:'+ btn.Caption); end; end;
procedure TForm1.Button1Click(Sender: TObject); begin with TBitBtn.Create(Form1) do begin Parent:= Form1; Caption:= 'Knap nr: '+IntToStr(KnapNr); Left:= XPos; Top:= YPos; Tag:= KnapNr; OnClick:= BtnClick; end; Inc(KnapNr); XPos := XPos + 20; YPos := YPos + 20; end;
procedure TForm1.Button2Click(Sender: TObject); var btn: TBitBtn; i: Integer; begin i:= 0; while i < ComponentCount do begin if (Components[i] is TBitBtn) then begin btn:= (Components[i] as TBitBtn); if btn.Tag = SpinEdit1.Value then btn.Free; end; inc(i); end; end;
Tusind tak for svarende... Brugte Morten_s's kode, syntes det passede bedst ind, da min kodestump var blevet ændret en smule da svarende kom :)
Har givet alle en smule point, man bliver jo ikke dummere af at lære lidt mere :)
Geek
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.