![]() |
DrawGrid Inhalt verschwindet beim Auswählen einer Zelle/Reihe
Liste der Anhänge anzeigen (Anzahl: 1)
Ich benutze folgenden Code um zwei Textzeilen mit unterschiedlicher Farbe und unterschiedlichem Einruck in ein DrawGrid zu zeichnen.
Delphi-Quellcode:
Das funktioniert soweit auch super. Nur wenn ich nun eine Zelle bzw die ganze Reihe anklicke und dieser blaue SelektierRahmen erscheint, verschwindet die untere Textzeile :(
procedure TForm1.DrawGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState); Var Rect1, Rect2: TRect; S: String; begin Rect1.Left := Rect.Left + 5; Rect1.Top := Rect.Top; Rect1.Height := Rect.Height Div 2; Rect2.Left := Rect.Left + 25; Rect2.Top := Rect.Top + (Rect.Height Div 2); Rect2.Height := Rect.Height DIV 2; S := 'Text 1'; DrawGrid.Canvas.Font.Color := clBlack; DrawGrid.Canvas.TextRect(Rect1, S, [tfVerticalCenter, tfSingleLine]); S := 'Text 2'; DrawGrid.Canvas.Font.Color := $006B6B6B; DrawGrid.Canvas.TextRect(Rect2, S, [tfVerticalCenter, tfSingleLine]); Woran liegt das? Zur Verdeutlichung hab ich ein Foto angehängt. Danke schonmal. Liebe Grüße. |
AW: DrawGrid Inhalt verschwindet beim Auswählen einer Zelle/Reihe
Also bei mir funktioniert dein Code ohne dass eine Text-Zeile verloren geht.
Was für eine Delphi-Version benutzt du? Ansonsten könntest du State abfragen:
Delphi-Quellcode:
procedure TForm1.DrawGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState); begin {...} If gdSelected in State then begin //Hier zeichnen wenn Zelle markiert ist end; If gdRowSelected in State then begin //Hier zeichnen wenn Zeile markiert ist end; {...} end; |
AW: DrawGrid Inhalt verschwindet beim Auswählen einer Zelle/Reihe
Also ich verwende Delphi XE2.
Ich habe vergessen zu erwähnen, dass mein Grid nur eine Spalte hat und mein beschriebenes Phänomen halt auftritt, wenn ich eben die Zelle anwähle, EGAL ob ich RowSelect true oder false setze :/ |
AW: DrawGrid Inhalt verschwindet beim Auswählen einer Zelle/Reihe
Zitat:
Zitat:
Könntest du bitte ein kleines Testprojekt bauen, indem man das Phänomen erkennt? |
AW: DrawGrid Inhalt verschwindet beim Auswählen einer Zelle/Reihe
Zitat:
Es lag an der Option:
Delphi-Quellcode:
Wenn ich die deaktiviere und bei OnExit folgendes tue:
goDrawFocusSelected
Delphi-Quellcode:
Dann klappt es.
procedure TForm1.QUEUE_Grid_Exit(Sender: TObject);
begin QUEUE_Grid.Selection := TGridRect(Rect(-1, -1, -1, -1)); end; Irgendwie muss der Focus der zurückbleibt, wenn man das Grid verlässt mein eines TextRect verschluckt haben :?::!: |
AW: DrawGrid Inhalt verschwindet beim Auswählen einer Zelle/Reihe
Wenn ich diese Option aktiviere, dann funktionierts trotzdem.
Hast du vielleicht irgendwo noch nen Code drin, der reinpfutscht? |
AW: DrawGrid Inhalt verschwindet beim Auswählen einer Zelle/Reihe
Zitat:
Ich hab das mit dem Selektieren jetzt folgendermaßen gelöst
Delphi-Quellcode:
Hab dann auch noch mehr Möglichkeiten die den Focus anzupassen. :-D
if (gdSelected in State) then
begin QUEUE_Grid.Canvas.Brush.Color := SelectColor; QUEUE_Grid.Canvas.FillRect(Rect); QUEUE_Grid.Canvas.Font.Color := clWhite; end else QUEUE_Grid.Canvas.Font.Color := clWindowText; |
AW: DrawGrid Inhalt verschwindet beim Auswählen einer Zelle/Reihe
Zitat:
Hab mein Codebeispiel dementsprechend korrigiert |
AW: DrawGrid Inhalt verschwindet beim Auswählen einer Zelle/Reihe
Für alle die ein ähnliches Problem haben. Ich habe nun rausgefunden, woran es wirklich lag.
Und zwar fehlten 2 Codezeilen: Rect1.Width := Rect.Width; Rect2.Width := Rect.Width; Also vollständig dann so:
Delphi-Quellcode:
Ansonsten kann es passieren, dass Rect1 oder Rect2 einen negativen Wert bekommen und somit das TextRect verschwindet :wall::wall:
procedure TForm1.DrawGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState); Var Rect1, Rect2: TRect; S: String; begin Rect1.Left := Rect.Left + 5; Rect1.Top := Rect.Top; Rect1.Height := Rect.Height Div 2; { Wichtig } Rect1.Width := Rect.Width; { Wichtig } Rect2.Left := Rect.Left + 25; Rect2.Top := Rect.Top + (Rect.Height Div 2); Rect2.Height := Rect.Height DIV 2; { Wichtig } Rect2.Width := Rect.Width; { Wichtig } S := 'Text 1'; DrawGrid.Canvas.Font.Color := clBlack; DrawGrid.Canvas.TextRect(Rect1, S, [tfVerticalCenter, tfSingleLine]); S := 'Text 2'; DrawGrid.Canvas.Font.Color := $006B6B6B; DrawGrid.Canvas.TextRect(Rect2, S, [tfVerticalCenter, tfSingleLine]); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:26 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