![]() |
OnClick wird nicht ausgelöst
Hi,
kann mir einer sagen, warum in folgendem Beispiel die zugewiesene Procedure CheckBoxClick nicht ausgelöst wird?
Delphi-Quellcode:
unit Unit1;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.StdCtrls; type TInlineCheckBox=class(TCheckBox) public Grid: TStringGrid; Col: Integer; Row: Integer; end; TForm1 = class(TForm) strngrd1: TStringGrid; procedure FormShow(Sender: TObject); procedure CheckboxClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.CheckboxClick(Sender: TObject); begin if (Sender as TInlineCheckBox).Checked then ShowMessage(Format('Col: %d Row: %d',[(Sender as TInlineCheckBox).Col, (Sender as TInlineCheckBox).Row])); end; procedure TForm1.FormShow(Sender: TObject); var c: Integer; r: Integer; InlineCheckBox: TInlineCheckBox; begin for c := 1 to strngrd1.ColCount-1 do for r := 1 to strngrd1.RowCount-1 do begin InlineCheckBox:=TInlineCheckBox.Create(self); InlineCheckBox.OnClick:=CheckboxClick; InlineCheckBox.Parent:=strngrd1; InlineCheckBox.Grid:=strngrd1; InlineCheckBox.Col:=c; InlineCheckBox.Row:=r; InlineCheckBox.BoundsRect:=strngrd1.CellRect(c, r); InlineCheckBox.Checked:=strngrd1.Cells[c, r]<>''; end; end; end. |
AW: OnClick wird nicht ausgelöst
Bei mir (D2007) wird da ja noch nicht mal die Checkbox gecheckt, wenn sie angeklickt wird. Also erst recht kein OnClick. Irgendwie kommen die CheckBoxen damit nicht zurecht, dass das Stringgrid das Parent ist.
Meine Lösung. In OnMouseUp Checked setzen, dadurch wird dann auch OnClick ausgelöst.
Delphi-Quellcode:
procedure TForm1.CheckBoxMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin (Sender as TInlineCheckBox).Checked:=not(Sender as TInlineCheckBox).Checked; end; InlineCheckBox.OnMouseUp:=CheckBoxMouseUp; |
AW: OnClick wird nicht ausgelöst
Zitat:
Deine Idee hatte ich auch schon und werde ich jetzt mal probieren. Aber trotzdem wüsste ich gerne das "warum". Vor allem, weil ich bei einem Verhalten dieser Art immer erst mal von einem Fehler meinerseits ausgehe. |
AW: OnClick wird nicht ausgelöst
Zitat:
Zitat:
Man muss also eine neue Klasse des gewünschten Grids ableiten und einen eigenen WM_COMMAND Handler schreiben, oder man ändert den Code in Vcl.Grids.pas, fügt einen simplen inherited-Aufruf hinzu. Mit Vcl.Grids.pas habe ich sowieso schon herumgespielt, um den Grids proportionale Scrollbars beizubringen... es nervt etwas, dass das noch immer nicht Standard ist.
Delphi-Quellcode:
Wer diesen Fehler Embarcadero melden möchte, sollte das bitte und gerne tun!
procedure TCustomGrid.WMCommand(var Message: TWMCommand);
begin with Message do begin if (FInplaceEdit <> nil) and (Ctl = FInplaceEdit.Handle) then case NotifyCode of EN_CHANGE: UpdateText; end // added by SMO: support for child controls (TCheckBox etc.) else inherited; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:16 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-2025 by Thomas Breitkreuz