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/)
-   -   Delphi FMX: StringGrid - Die Pixel passen nicht (https://www.delphipraxis.net/188759-fmx-stringgrid-die-pixel-passen-nicht.html)

Der schöne Günther 5. Apr 2016 08:21

FMX: StringGrid - Die Pixel passen nicht
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ich mache grade meine ersten Gehversuche mit FireMonkey. Ich werfe einen TStringGrid auf ein Formular. Füge zwei Spalten hinzu. Es sieht aus wie im Anhang.

Ich finde nichts, was ich anpassen kann damit die Überschriften-Zeile auch zum Inhalt passt. Wer kann mir helfen?

Delphi-Quellcode:
object StringGrid1: TStringGrid
  Position.X = 16.000000000000000000
  Position.Y = 8.000000000000000000
  Size.Width = 289.000000000000000000
  Size.Height = 177.000000000000000000
  Size.PlatformDefault = False
  TabOrder = 0
  ReadOnly = True
  RowCount = 5
  RowHeight = 21.000000000000000000
  Viewport.Width = 285.000000000000000000
  Viewport.Height = 152.000000000000000000
  object StringColumn1: TStringColumn
    Size.Width = 89.000000000000000000
    Size.Height = 105.000000000000000000
    Size.PlatformDefault = False
    TabOrder = 0
  end
  object StringColumn2: TStringColumn
    Header = 'Hallo'
    Margins.Right = -1.000000000000000000
    Position.X = 100.000000000000000000
    Size.Width = 99.000000000000000000
    Size.Height = 105.000000000000000000
    Size.PlatformDefault = False
    TabOrder = 1
  end
end

Harry Stahl 5. Apr 2016 16:46

AW: FMX: StringGrid - Die Pixel passen nicht
 
Wichtig bei solchen Fragen ist immer, dass Du die benutzte Delphi-Version nennst und auf welchem Betriebssystem du da gerade arbeitest.

Gehe von Delphi 10 Seattle aus und Windows 10.

Da wird nämlich standardmäßig der Windows 10 Style eingesetzt, der wohl an dieser Stelle nicht so ganz OK ist.

In der FMX-Formular-Datei wirst Du bei den Objekten nichts finden. Denkbar wäre noch an den Styles was zu ändern, da habe ich so auf die Schnelle aber keine funktionierende Einstellmöglichkeit gefunden.

Würde daher im ONDrawColumnHeader-Event des StringGrids die Header der Spalten selber zeichnen und entsprechend korrigieren.

Der schöne Günther 5. Apr 2016 19:07

AW: FMX: StringGrid - Die Pixel passen nicht
 
Der FireMonkey-Spezialist spricht, wer hätte es sonst sein sollen :thumb:

Meine Schuld, ja, selbstverständlich neuste Version "10 Seattle", OS war Windows 10. Auf einem älteren Windows wäre es anders sagst du? Ich könnte mich falsch erinnern, aber ich meine in der Ansicht für Android war der gleiche Fehler.

Das "OnDrawColumnHeader"-Event werde ich mir gleich einmal ansehen, Danke!

Harry Stahl 5. Apr 2016 19:33

AW: FMX: StringGrid - Die Pixel passen nicht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ja, auf einem älteren Windows (hier 8.1) sieht es aus, wie in der Anlage (da ist die Trennung mit 2 Linien im Header drin).

Der schöne Günther 5. Apr 2016 20:46

AW: FMX: StringGrid - Die Pixel passen nicht
 
Eine ganz dumme Frage: Was muss ich in FMX mit den Draw-Events beachten? Entweder ist es für mich heute schon zu spät, oder es hat keine Auswirkung, was ich in dem Event mache. Ich meine, sollte hier nicht irgendetwas ... blau werden?

Delphi-Quellcode:
procedure TForm1.StringGrid1DrawColumnHeader(Sender: TObject;
  const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF);
begin
   Canvas.Fill.Color := TColors.Blue;
   Canvas.FillRect(Bounds, 10.0, 10.0, [TCorner.TopLeft], 0.5);
end;
Oder muss ich hier noch etwas am StringGrid einstellen?

Harry Stahl 5. Apr 2016 22:22

AW: FMX: StringGrid - Die Pixel passen nicht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier mal ein kleines Beispiel:

Delphi-Quellcode:
procedure TForm18.StringGrid1DrawColumnHeader(Sender: TObject;
  const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF);
begin
  canvas.BeginScene;
 
  // Hintergrund leeren bzw. ausfüllen
  canvas.ClearRect(bounds,TAlphaColorRec.LightGray);

  // Linienbreite
  canvas.Stroke.Thickness := 0.2;
  canvas.Fill.Color := TAlphaColorRec.Silver;

  if Column.Index >0 then begin
    // Linie links
    canvas.DrawLine(PointF (bounds.Left, bounds.Top), PointF (bounds.left, bounds.Bottom), 1);
  end;

  canvas.DrawLine(PointF (bounds.Left, bounds.Bottom), PointF (bounds.Right, bounds.Bottom), 1);

  canvas.Fill.color := TAlphaColorRec.black;
  canvas.FillText(Bounds, column.Header, false, 1, [], TTextAlign.Center, TTextAlign.Center);

  canvas.EndScene;
end;
Unter Windows 10 sieht das aus, wie im anliegenden Screenshot. Für Deine Bedürfnisse kannst Du das ja entsprechend anpassen, auch hinsichtlich der Farben. Soll der Header allerdings anklickbar sein, müsstest Du die verschiedenen Verhaltensweisen (Mouse fährt drüber, Klick down) auch noch selber hier zeichnen, würde dann also deutlich komplizierter werden.

Wäre evtl. auch sinnvoll, das als Bug zu melden, denn das sieht gerade unter Windows 10 ziemlich bescheiden aus.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:04 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