![]() |
Button OnClick wird nicht ausgelöst..
Hallo zusammen,
ich hab folgendes Problem: Hiermit mach ich in Stringgrid einen bzw. mehrere Buttons:
Delphi-Quellcode:
mein kleines aber feines Problem ist jetzt, dass das zugewiesene OnClick nicht ausgeführt wird. weis jemand was da noch fehlt?
procedure TForm1.StringgridDrawCell(Sender : TObject; ACol, ARow : Integer; Rect : TRect; State : TGridDrawState);
begin if (ACol = 2) and (ARow > 0) and (Stringgrid1.Objects[ACol,ARow] = nil) then begin Stringgrid1.Objects[ACol,ARow]:=TButton.Create(Stringgrid1); with TButton(Stringgrid1.Objects[ACol,ARow]) do begin Name := 'sgButton'+IntTostr(ARow); Parent:=Stinggrid1; Top:=Rect.Top; Left:=Rect.Left; Width:=Rect.Right-Rect.Left; Height:=Rect.Bottom-Rect.Top; OnClick:=MyOnClick; end; end; end; procedure TForm1.MyOnClick(Sender : TObject); begin if Sender is TButton then with TButton(Sender) do Stringgrid1.Cells[0,StrToint(Copy(Name,9,Length(Name)-9))]:='Clicked'; end; MfG :angel: |
Re: Button OnClick wird nicht ausgelöst..
bist du dir sicher das nicht ins OnClick gesprungen wird? hast du dort mal einen Haltepunkt gesetzt?
|
Re: Button OnClick wird nicht ausgelöst..
ja türlich habbich.. iss nich rein... ich kann draufklicken.. aber es springt einfach net rein..
|
Re: Button OnClick wird nicht ausgelöst..
an dem source ist eigentlich alles richtig. Hast du probiert ob das ganze richtig funktioniert wenn du die Buttons nicht auf dem Stringgrid sondern auf dem Form direkt anlegst? Du könntest zum Debuggen auch mal den kreierten Button auf eine Zwischenvariable zuweisen und ohne "with" durchprobieren ob alles richtig gesetzt wird. Da der Button ja offensichtlich richtig erzeugt wird und auch sichtbar ist hätte ich noch die Vermutung das sich ein anderes Control in den Vordergrund schiebt so das der Click nie beim Button ankommt.
|
Re: Button OnClick wird nicht ausgelöst..
Warum schreibst du ARow nicht als .Tag in den Button, dann ist es im Eventhandler die richtige Zeile zu finden.
Delphi-Quellcode:
procedure TForm1.MyOnClick(Sender : TObject);
begin if Sender is TButton then with TButton(Sender) do Stringgrid1.Cells[0,Tag]:='Clicked'; end; |
Re: Button OnClick wird nicht ausgelöst..
@mkinzler: Danke für den Tipp, ist aber OT da er da nie ankommt.
@SirThornberry: der Buttonclick wird ja animiert, also sollte er auch ausgelöst werden und ankommen oder? |
Re: Button OnClick wird nicht ausgelöst..
wenn der "click" animiert wird sollte der Klick auch ausgelöst werden. Deswegen hatte ich auch vorgeschlagen das danze mal auf eine Zwischenvariable zu zuweisen um zu debuggen ob da wirklich das OnClick richtig zugewiesen wird.
|
Re: Button OnClick wird nicht ausgelöst..
Delphi-Quellcode:
hier funktioniert das OnClick. Also er springt bei nem Klick rein. Und jetzt?
var b : TObject;
... procedure TForm1.Button1Click(Sender : TObject); begin b:=TButton.Create(Self); with TButton(b) do begin Parent:=Self; Name:='Testb1'; Top:=0; Left:=0; Width:=100; Height:=100; OnClick:=MyOnClick; end; end; |
Re: Button OnClick wird nicht ausgelöst..
Setze mal zum Test in deinem originallem Programm den Parent der Buttons auf die Form. Es scheint hier ein Problem der Eventweiterreichnung des StringGrids zu geben.
|
Re: Button OnClick wird nicht ausgelöst..
[OT]Die b-Variable wäre bei dem Test lokal besser aufgehoben[OT]
Ich würde dir wenn es so funktioniert mal empfehlen das in die andere Funktion einzubauen. Also dort mit einer Zwischenvariablen arbeiten und dann die Zwischenvariable auf das "Objects" zuweisen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz