[gelöst] StringGrid und DrawCell

Rund um die LCL und andere Komponenten
DonMigos
Beiträge: 52
Registriert: Mi 15. Mai 2013, 21:21
OS, Lazarus, FPC: Win7 (L 1.0.8 FPC 2.6.2)
CPU-Target: 32Bit

Re: StringGrid und DrawCell

Beitrag von DonMigos »

DonMigos hat geschrieben:Wußtest du auch das alles was du machst StringGrid schon bietetet:
AlternateColor,
FocusedColor,
SelectedColor,
OnPrepareCanvas (Canvas.TextStyle für Textausrichtung),
...

Mehr gibt's hier:
http://wiki.freepascal.org/Grids_Reference_Page/de
Das mit dem mod 2 war nur zum testen und AlternateColor ist so wie ich das sehe auch nur für Reihen
(AlternateColor. With this the user can change the background color appears on alternated rows. This is to allow easy reading off of grid rows data. )
Trotzdem danke für den interessanten Link, bis jetzt habe ich dort aber noch nichts mehr gefunden, was helfen könnte.
Soner hat geschrieben: Dast ist ja so gewollt, sonst weiß ja der Benutzer nicht in welche Zelle er etwas eingibt. Wenn du das ändern willst dann füge doch Bedingung hinzu, so etwas:
if DateiGeladen and ((gdSelected in AState) or (gdFocused in AState)) then ...
was meinst du mit DateiGeladen ?

DonMigos
Beiträge: 52
Registriert: Mi 15. Mai 2013, 21:21
OS, Lazarus, FPC: Win7 (L 1.0.8 FPC 2.6.2)
CPU-Target: 32Bit

Re: StringGrid und DrawCell

Beitrag von DonMigos »

So ich habe jetzt eine Lösung, die besser funktioniert, zwar bleibt beim löschen noch eine graue Zelle übrig, aber damit habe ich jetzt nicht unbedingt ein Problem...
Verzichtet man ganz auf das DrawCell Ereignis mit eigenen Farben für die Spalten, dann klappt das Löschen auch komplett.

Code: Alles auswählen

var
  Reihe: Integer = 0;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  with StringGrid1 do
  begin
    DefaultDrawing:= False;
    Options:= Options + [goSelectionActive,goRowSelect]; 
    Cells[1,1]:= 'Hallo';
    FixedCols := 0;
    FixedRows := 0;
  end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);  // Ganze Reihen nacheinander markieren
begin
  StringGrid1.Options:= StringGrid1.Options + [goSelectionActive,goRowSelect];
  if Reihe > StringGrid1.RowCount-1 then Reihe:= 0;
  StringGrid1.Selection := TGridRect(Rect(0,Reihe,StringGrid1.ColCount-1,Reihe));
  Inc(Reihe);
end;
 
procedure TForm1.Button2Click(Sender: TObject);  //Auswahl löschen
begin
  StringGrid1.Options:= StringGrid1.Options - [goSelectionActive,goRowSelect];
  //StringGrid1.Selection := TGridRect(Rect(-1,-1,-1,-1)); nicht mehr nötig
end;
 
procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
  aRect: TRect; aState: TGridDrawState);
var
  ZeilenText: string;
  MyTxtStyle: TTextStyle;
begin
  with StringGrid1 do
  begin
    if (gdSelected in aState) or (gdFocused in aState) then //Wenn die Zelle ausgewählt ist
    begin
      Canvas.Font.Color := clblack;
      Canvas.Brush.Color := clGray; //Farbe wenn Zelle ausgewählt ist
    end
    else  if ACol mod 2 = 0 then //Jede zweite Spalte
    begin
      Canvas.Font.Color := clWhite;
      Canvas.Brush.Color := clBlue; //Farbe auswählen zum Zeichnen
    end
    else //sonstige Zellen
    begin
      Canvas.Font.Color := clWindowText;
      Canvas.Brush.Color := clWindow; //Farbe auswählen zum Zeichnen
    end;
 
    Canvas.FillRect(ARect);  //Zelle Zeichnen
 
    ZeilenText := Cells[ACol, ARow]; // Text der Zelle holen
 
    //Text zentriert zeichnen
    MyTxtStyle.Alignment := taCenter;
    MyTxtStyle.Layout := tlCenter;
    Canvas.TextRect(aRect,aRect.Left, aRect.Top, ZeilenText,MyTxtStyle);
  end;
end;                                              

Soner
Beiträge: 734
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: StringGrid und DrawCell

Beitrag von Soner »

Mit "Dateiladen" habe ich nur ein Beispiel für Bedingung gegeben. Meinst mit "mit eigenen Farben für die Spalten" Titelzeilen und Tielspalten (FixedRows und FIxedCols)?
Wenn ja, dann kanst du die doch besonders behandeln.
Ich glaube hier hast du nicht Programmierfehler sondern logische Fehler. Wenn du sagst was du im Endeffekt haben willst dann kann/könnte man dir schneller helfen.

DonMigos
Beiträge: 52
Registriert: Mi 15. Mai 2013, 21:21
OS, Lazarus, FPC: Win7 (L 1.0.8 FPC 2.6.2)
CPU-Target: 32Bit

Re: StringGrid und DrawCell

Beitrag von DonMigos »

Im Prinzip soll es schon so sein wie das lezte Beispiel, nur das die erste Spalte Farbig ist und nicht jede 2te. Ich weiß auch das es mit FixedCols geht die Farbe einfach zu wählen, aber über FixedCols gehen keine Selektionen drüber wie es bei mir sein soll. FixedCols würde ich nehmen, wenn die Selktion über die FixedCols gehen würde.
Auf das Löschen der Markierung kann ich auch verzichten.

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: StringGrid und DrawCell

Beitrag von MmVisual »

DonMigos hat geschrieben: gdRowHighlight gibt es bei StringGrid nicht.
Im TStringGrid gibt es das auch, heißt aber anders: goRowHighlight und macht das gleiche.
EleLa - Elektronik Lagerverwaltung - www.elela.de

DonMigos
Beiträge: 52
Registriert: Mi 15. Mai 2013, 21:21
OS, Lazarus, FPC: Win7 (L 1.0.8 FPC 2.6.2)
CPU-Target: 32Bit

Re: StringGrid und DrawCell

Beitrag von DonMigos »

MmVisual hat geschrieben:Im TStringGrid gibt es das auch, heißt aber anders: goRowHighlight und macht das gleiche.
Nein gibt es nicht: http://www.lazarus-ccr.sourceforge.net/ ... tions.html

Wahrscheinlich meinst du goRowSelect, was ich ja auch bei meiner letzten Lösung (mit der ich soweit zufrieden bin) verwende.

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: [gelöst] StringGrid und DrawCell

Beitrag von MmVisual »

Doch, gibt es, seit Mitte Februar dieses Jahr. Dann hast Du wohl ein altes Lazarus :mrgreen:
Dateianhänge
Bild1.png
Bild1.png (7.58 KiB) 2104 mal betrachtet
EleLa - Elektronik Lagerverwaltung - www.elela.de

DonMigos
Beiträge: 52
Registriert: Mi 15. Mai 2013, 21:21
OS, Lazarus, FPC: Win7 (L 1.0.8 FPC 2.6.2)
CPU-Target: 32Bit

Re: [gelöst] StringGrid und DrawCell

Beitrag von DonMigos »

Gibt es irgendwo eine Beschreibung was die Option macht ?
In Lazarus 1.0.8 mit FPC 2.6.2 ist sie jedenfalls noch nicht mit dabei.

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: [gelöst] StringGrid und DrawCell

Beitrag von Michl »

Im aktuellen (1.0.10) Lazarus Win32 ebenfalls nicht

Code: Alles auswählen

type
  TGridOption = (
    goFixedVertLine,      // Ya
    goFixedHorzLine,      // Ya
    goVertLine,           // Ya
    goHorzLine,           // Ya
    goRangeSelect,        // Ya
    goDrawFocusSelected,  // Ya
    goRowSizing,          // Ya
    goColSizing,          // Ya
    goRowMoving,          // Ya
    goColMoving,          // Ya
    goEditing,            // Ya
    goAutoAddRows,        // JuMa
    goTabs,               // Ya
    goRowSelect,          // Ya
    goAlwaysShowEditor,   // Ya
    goThumbTracking,      // ya
    // Additional Options
    goColSpanning,        // Enable cellextent calcs
    goRelaxedRowSelect,   // User can see focused cell on goRowSelect
    goDblClickAutoSize,   // dblclicking columns borders (on hdrs) resize col.
    goSmoothScroll,       // Switch scrolling mode (pixel scroll is by default)
    goFixedRowNumbering,  // Ya
    goScrollKeepVisible,  // keeps focused cell visible while scrolling
    goHeaderHotTracking,  // Header cells change look when mouse is over them
    goHeaderPushedLook,   // Header cells looks pushed when clicked
    goSelectionActive,    // Setting grid.Selection moves also cell cursor
    goFixedColSizing,     // Allow to resize fixed columns
    goDontScrollPartCell, // clicking partially visible cells will not scroll
    goCellHints,          // show individual cell hints
    goTruncCellHints,     // show cell hints if cell text is too long
    goCellEllipsis        // show "..." if cell text is too long
  );                                 
Dateianhänge
Lazarus 1.0.10.jpg

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: [gelöst] StringGrid und DrawCell

Beitrag von MmVisual »

Im aktuellen SVN ist die dabei. Hier ist mein Bugtracker zu diesem Feature:
http://bugs.freepascal.org/view.php?id=18581
Und darin ist auch beschrieben wie das geht. Ich musste 2 Jahre warten bis mein Code in die LCL übernommen wurde 8)

Hier der Thread dazu:
http://www.lazarusforum.de/viewtopic.ph ... it=TDBGrid
EleLa - Elektronik Lagerverwaltung - www.elela.de

DonMigos
Beiträge: 52
Registriert: Mi 15. Mai 2013, 21:21
OS, Lazarus, FPC: Win7 (L 1.0.8 FPC 2.6.2)
CPU-Target: 32Bit

Re: [gelöst] StringGrid und DrawCell

Beitrag von DonMigos »

Danke für die Info, ich werd mir mal demnächst anschauen ob sich damit mein Problem besser lösen lässt, momentan langt mir aber die letze Lösung.

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: [gelöst] StringGrid und DrawCell

Beitrag von MmVisual »

Es sieht für den User einfach schöner aus, wenn die aktuelle Zeile hervorgehoben wird, vor allem bei Datenbanken, da man immer den einen Datensatz bearbeitet.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Antworten