Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   DrawGrid Inhalt verschwindet beim Auswählen einer Zelle/Reihe (https://www.delphipraxis.net/172451-drawgrid-inhalt-verschwindet-beim-auswaehlen-einer-zelle-reihe.html)

MeisterLampe 4. Jan 2013 17:44

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:
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]);
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 :(

Woran liegt das?
Zur Verdeutlichung hab ich ein Foto angehängt.

Danke schonmal.
Liebe Grüße.

Helmi 4. Jan 2013 19:16

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;

MeisterLampe 4. Jan 2013 20:51

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 :/

Helmi 4. Jan 2013 20:59

AW: DrawGrid Inhalt verschwindet beim Auswählen einer Zelle/Reihe
 
Zitat:

Zitat von MeisterLampe (Beitrag 1197691)
Also ich verwende Delphi XE2.

Trage das doch bitte in deinem Profil ein, dann weiss jeder sofort was du nutzt

Zitat:

Zitat von MeisterLampe (Beitrag 1197691)
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 :/

Auch mit nur einer Spalte hab ich keine Probleme.
Könntest du bitte ein kleines Testprojekt bauen, indem man das Phänomen erkennt?

MeisterLampe 4. Jan 2013 21:14

AW: DrawGrid Inhalt verschwindet beim Auswählen einer Zelle/Reihe
 
Zitat:

Zitat von Helmi (Beitrag 1197695)
Auch mit nur einer Spalte hab ich keine Probleme.
Könntest du bitte ein kleines Testprojekt bauen, indem man das Phänomen erkennt?

Ist glaube ich nicht mehr nötig.
Es lag an der Option:
Delphi-Quellcode:
goDrawFocusSelected
Wenn ich die deaktiviere und bei OnExit folgendes tue:
Delphi-Quellcode:
procedure TForm1.QUEUE_Grid_Exit(Sender: TObject);
begin
  QUEUE_Grid.Selection := TGridRect(Rect(-1, -1, -1, -1));
end;
Dann klappt es.

Irgendwie muss der Focus der zurückbleibt, wenn man das Grid verlässt mein eines TextRect verschluckt haben :?::!:

Helmi 4. Jan 2013 21:19

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?

MeisterLampe 4. Jan 2013 23:28

AW: DrawGrid Inhalt verschwindet beim Auswählen einer Zelle/Reihe
 
Zitat:

Zitat von Helmi (Beitrag 1197703)
Wenn ich diese Option aktiviere, dann funktionierts trotzdem.

Hast du vielleicht irgendwo noch nen Code drin, der reinpfutscht?

Bei mir nicht. Und nein ich hab keinen Code der bei OnSelect etc ausgeführt wird und somit reinpfuscht.
Ich hab das mit dem Selektieren jetzt folgendermaßen gelöst
Delphi-Quellcode:
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;
Hab dann auch noch mehr Möglichkeiten die den Focus anzupassen. :-D

Helmi 5. Jan 2013 09:42

AW: DrawGrid Inhalt verschwindet beim Auswählen einer Zelle/Reihe
 
Zitat:

Zitat von MeisterLampe (Beitrag 1197711)
Delphi-Quellcode:
if (gdSelected in State) then

Bin gestern ums verrecken nicht auf diese Anweisung gekommen :wall:
Hab mein Codebeispiel dementsprechend korrigiert

MeisterLampe 6. Jan 2013 17:37

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:
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]);
Ansonsten kann es passieren, dass Rect1 oder Rect2 einen negativen Wert bekommen und somit das TextRect verschwindet :wall::wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz