![]() |
[erledigt] CheckBox in Stringgrid
Hi,
ich habe in eine Spalte eines Stringgrids Checkboxen eingebaut. Im OnDrawCell übergebe ich hierzu die Koordinaten der Stringgrid Zellen (Rect) an die Checkboxen, damit sie genau reinpassen. Nun werden sie allerdings immer wieder neu gezeichnet => flackern. Allerdings habe ich in dem Grid ganz andere Sachen drin (in Abhängigkeit des Zellinhalts umfärben, rechtsbündige Darstellung bei Zahlen, Nachkommastellen usw.) und da flackert nichts. Was ist da falsch ? Hier noch Teil vom OnDrawCell :
Delphi-Quellcode:
if ACol in BoolCols then begin
sgCheckBox.Left := Rect.Left + sg.Left + 2; sgCheckBox.Top := Rect.Top + sg.top + 2; sgCheckBox.Width := Rect.Right - Rect.Left; sgCheckBox.Height := Rect.Bottom - Rect.Top; sgCheckBox.Visible := True; |
Re: CheckBox in Stringgrid
Hallo,
mal eine Frage dazu, spendierst Du jeder betreffenden Zelle eine eigene CheckBox? |
Re: CheckBox in Stringgrid
moin hansa,
wie wäre es mit der Suche :mrgreen: CheckBox im Stringgrid .... gibt es genau einem Eintrag :shock: raik |
Re: CheckBox in Stringgrid
Auf der Form ist eine einzige Checkbox. Und die wird allerdings immer wieder mit veränderten Koordinaten angezeigt.
@roter Kasten Schlaumeier :mrgreen: bei mir ist da nicht. |
Re: CheckBox in Stringgrid
|
Re: CheckBox in Stringgrid
Hallo,
Zitat:
Durch das Verschieben der CheckBox von einer Zelle in eine andere, wird die Zelle aus der die Checkbox entfernt wurde auch neu gezeichnet, das Zeichnen verschiebt die Checkbox dann wieder usw. usw. Dein Code fordert für jede Zelle in der Spalte die Checkbox-Verschiebung, daraus entsteht dann eine Endlosschleife, folglich flackert es. Dein Code in OnDrawCell muss das behandeln. PseudoCode:
Code:
if ACol in CheckBoxSpalte then
if SollCheckBox then CheckBoxNachHierVerschieben else LeereZelleZeichnen |
Re: CheckBox in Stringgrid
Oh je. Das wird noch komplizierter. Habe das jetzt so gemacht :
Delphi-Quellcode:
Wenn ich das richtig dehe, dann sind die Checkboxen lediglich zu sehen und haben keine Funktion, oder ? Muß ich da jetzt noch mit MouseMove im SelectCell usw. hantieren ? :shock:
if ACol in BoolCols then begin
DrawRect:=Rect; InflateRect(DrawRect,-1,-1); DrawState := ISChecked[StrToInt (sg.Cells [ACol,ARow]) = 1]; sg.Canvas.FillRect(Rect); DrawFrameControl(sgArtNr.Canvas.Handle, DrawRect,DFC_BUTTON, DrawState); |
Re: CheckBox in Stringgrid
Hallo
vielleicht hilft dir ja das weiter : ![]() Das ist zwar eine ComboBox in einer StringGrid, aber das kann man ja umbauen. |
Re: CheckBox in Stringgrid
und noch einer
![]() |
Re: CheckBox in Stringgrid
Das habe ich doch alles schon gesehen. :-D Die Checkbox ist anders ! Aber egal. Gezeichnet war sie ja vorher sowieso richtig. Habe es jetzt so gemacht :
Delphi-Quellcode:
Ist auch besser für nicht so zielsichere. Die brauchen dann nur die richtige Zelle zu treffen und nicht die CheckBox selber. :mrgreen: Tja, da sieht man mal wieder, wie man mit einem simplen Trick Delphi veranlaßt, genau das gewünschte zu machen. Und der Trick besteht darin, daß hinter der CheckBox in Wirklichkeit 1 oder 0 steht. 8)
procedure Tfrm.sgClick(Sender: TObject);
begin inherited; if sg.Col in BoolCols then begin if StrVorhanden (sg.Cells [sg.Col,sg.Row]) then begin if StrToInt (sg.Cells [sg.Col,sg.Row]) = 1 then sgr.Cells [sg.Col,sgArtNr.Row] := '0' else sg.Cells [sg.Col,sg.Row] := '1'; end; end; end; |
Re: [erledigt] CheckBox in Stringgrid
Hallo,
ich versuche gerade eine CheckBox im Stringgrid zu simulieren. Ich kann das Beispiel aber nicht nachbauen (Delphi 5). Fehlermeldungen: 1) Undefinierter Bezeichner "IsChecked" 2) Bei DrawFrameControl: Inkompatible Typen: 'Cardinal' und 'TGridDrawState' Wo ist DrawRect und DrawState deklariert ? Wird die CheckBox 'sgCheckBox' (befindet sich auf Formular) auf hidden gesetzt ? Danke |
Re: [erledigt] CheckBox in Stringgrid
Lieber Hansa!
Dein Beispiel würde mich interessieren. Hiezu würde ich jedoch noch obige Angaben benötigen. Danke. |
Re: [erledigt] CheckBox in Stringgrid
Jo, das Beispiel ist wirklich zu mager. So ungefähr muß es aber aussehen. Das ist die Stelle, die bei Dir wohl Ärger macht :
Delphi-Quellcode:
Wenn das alleine nicht reicht, dann poste bitte den eigenen Quelltext. Die komplette Prozedur hat ca. 200 Zeilen und würde wohl nichts nützen, weil zu speziell. Außerdem ist es OOP-mäßig strukturiert, d.h. einige Eigenschaften sind eventuell bereits bei einem Vorfahren deklariert.
procedure Tfrm.sgDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState); const IsChecked : array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED); var DrawState: Integer; DrawRect: TRect; begin inherited; |
Re: [erledigt] CheckBox in Stringgrid
Stop, der Kopf ist zu wenig. Da gibts noch lästige Hürden. Hier ist das wichtige (aus OnDrawCell !) :
Delphi-Quellcode:
Damit dürfte das jetzt aber hinzukriegen sein. CheckBoxCols ist dabei ein eigenes SET OF byte um entscheiden zu können, um welche Spalten es geht (habe da einige). Und Achtung : das Beispiel zeigt so nur gecheckte Boxen an ! Außerdem muß noch das OnMouseClick ausgewertet werden, damit die DheckBox wie erwartet funktioniert.
if ACol in CheckBoxCols then begin
if StrToInt (sg.Cells [ACol,ARow]) = 1 then begin DrawRect:=Rect; InflateRect(DrawRect,-1,-1); DrawState := ISChecked[StrToInt (sg.Cells [ACol,ARow]) = 1]; // ^ die 0/1, die aus dem DB-Original in sg steht beeinflusst, ob die // CheckBox gecheckt ist ! D.h. sie wird im OnDrawCell je nach Wert gezeichnet ! sg.Canvas.FillRect(Rect); // hinter Cells liegende 0/1 nicht anz. DrawFrameControl(sgNr.Canvas.Handle,DrawRect,DFC_BUTTON,DrawState); end else begin // unchecked : Checkbox ausblenden DrawRect:=Rect; InflateRect(DrawRect,-1,-1); Canvas.FillRect(DrawRect); // unchecked-0 überdecken // canvas.TextOut(rect.Left,rect.bottom-canvas.Textheight('X')-1,' '); end; end |
Re: [erledigt] CheckBox in Stringgrid
Danke bisher.
Ich bin derzeit anderweitig beschäftigt. Komme noch mal darauf zurück und werde das Beispiel aufbauen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:46 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