Hallo,
Ich erzeuge dynamisch eine Reihe von TBitBtn und zeichne sie mit TStringGrid.OnDrawCell flächenfüllend in bestimmte Zellen des TStringGrid. Das funktioniert optisch am besten, wenn ich die TBitBtn direkt in das TStringGrid einfüge:
Delphi-Quelltext
1: 2: 3:
| BitBtn:= TBitBtn.Create(Self); BitBtn.OnClick:= MeineOnClickProzedur; StringGrid.InsertControl(BitBtn); |
Aber großer Kummer: Die TBitBtn lassen sich zwar anklicken und zeigen dann auch die dafür typische Animation. Das Ereignis TBitBtn.OnClick wird jedoch nicht ausgelöst, und somit auch MeineOnClickProzedur nicht ausgeführt. So als ob das TStringGrid dem TBitBtn das Ereignis "zur Hälfte" wegfängt: Animation ist noch da, aber Auslösung nicht mehr.
Als funktionierenden Weg mit Auslösung von TBitBtn.OnClick habe ich gefunden, ein TPanel von gleicher Größe hinter das TStringGrid zu legen und die TBitBtn dort einzufügen:
Delphi-Quelltext
1: 2: 3:
| BitBtn:= TBitBtn.Create(Self); BitBtn.OnClick:= MeineOnClickProzedur; Panel.InsertControl(BitBtn); |
Das erfordert jedoch, bei jeder Größenordnung des TStringGrid parallel dazu auch das TPanel anzupassen. Und bei gleicher linker oberer Ecke von TStringGrid und TPanel sind deren Koordinatensysteme auch noch ein kleines Stück gegeneinander verschoben, was ich in TStringGrid.OnDrawCell korrigieren muss.
Geht im Prinzip so, aber "schön" finde ich diesen Umweg nicht. Hat jemand von Euch eine Idee, wie ich den Klick im ersten Fall vollständig zum TBitBtn durchleiten kann? Vielen Dank.
Gru Uwe