Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Text mittig (center) im Stringgrid (https://www.delphipraxis.net/194779-text-mittig-center-im-stringgrid.html)

derseitzer 4. Jan 2018 09:24

Delphi-Version: 10 Seattle

Text mittig (center) im Stringgrid
 
Halloo,

habe von hier: https://www.delphi-treff.de/tipps-tr...id-ausrichten/
mir den Code für das zentrieren von texten im Stringgrid geholt, allerdings ist mir beim Austesten aufgefallen, das wenn ich vor dem beschreiben einer Zelle diese markiert habe (mit der Maus Linksklick) der Text doppelt eingefügt wird. Einmal mittig und einmal linksbündig..

Gerade beim Start des Programmes fokusiert schon automatisch die erste Zelle und fügt überall exakt und mittig Texte ein.. außer bei der fokusierten ersten Zelle.
Hattet ihr das problem auch schon?
MFG derseitzer

Helmi 4. Jan 2018 09:51

AW: Text mittig (center) im Stringgrid
 
Hallo,

wenn ich im StringGrid einen Text mittig darstellen will, dann mach ich das immer so:

Delphi-Quellcode:
procedure TSetupForm.StringGrid_ZugzieleDrawCell(Sender: TObject;
  ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
var
  Diff_Top: Integer;
  Diff_Left: Integer;
  S_Text: String;

begin
  //Text auslesen
  S_Text := StringGrid_Zugziele.Cells[ACol, ARow];

//bin mir jetzt nicht sicher, ob man diese Zeile für den Text benötigt
//ändere im Originalcode auch noch die Farbe
//  StringGrid_Zugziele.Canvas.FillRect(Rect);

  //Text mittig berechnen
  Diff_Top := (Rect.Bottom - Rect.Top - StringGrid_Zugziele.Canvas.TextHeight(S_Text)) div 2;
  Diff_Left := (Rect.Right - Rect.Left - StringGrid_Zugziele.Canvas.TextWidth(S_Text)) div 2;

  StringGrid_Zugziele.Canvas.TextRect(Rect, Rect.Left + Diff_Left, Rect.Top + Diff_Top, S_Text);

end;

derseitzer 4. Jan 2018 14:21

AW: Text mittig (center) im Stringgrid
 
Hallo Helmi,

Viele Dank für deine Antwort und dein Codebeispiel. Ich habe es getestet und der Fehler kommt bei mir hier genauso vor!
Markiere ich eine Zelle und beschreibe alle, funktioniert dein Code für alle Zellen, mit Ausnahme der einen markierten :/

Edit: mir ist aufgefallen, dass das nur vorkommt, wenn ich die Texte mit eine Button.click einsetze und nicht, wenn ich sie z.B. mit Form.Show einsetze. In meinem Fall wäre das Problem dann nicht so tragisch :-D

Helmi 4. Jan 2018 14:29

AW: Text mittig (center) im Stringgrid
 
kann es sein, dass es nur so ausschaut, als ob es doppelt ist, weil der Editor der Zelle aktiv ist und dieser linksbündig ist?
schalte doch mal zum Füllen unter Options goEditing aus

Blup 4. Jan 2018 15:56

AW: Text mittig (center) im Stringgrid
 
Entscheident ist nicht ob die Zelle den Focus hat, sondern ob das Grid im Editormodus ist.
In dem Fall wird nähmlich nicht die durch deinen Code gezeichnete Zelle angezeigt, sondern an dieser Stelle der InplaceEditor.

Options.goAlwaysShowEditor = False
>>> Der Editormode muss vom Anwender erst durch eine Eingabe(Taste) aktiviert werden.

EditorMode = True/False
>>> Den Editor programmgesteuert ein oder ausblenden.

derseitzer 10. Jan 2018 08:27

AW: Text mittig (center) im Stringgrid
 
Tut mir leid für die späte Antwort,

Ich habe GoEditing, sowie alwyasshoweditor auf False und es passiert per Button click trotzdem. Egal, ob mein Programmcode oder der von Helmi - wenn Ihr Text per Buttonclick einfügt wird bei der ersten Zelle der Text linksbündig, woie mittig angezeigt.

hoika 10. Jan 2018 08:34

AW: Text mittig (center) im Stringgrid
 
Hallo,
mach mal ein Minimalbeispiel, dann eine Zip-Datei und hier posten.

ich würde hier eh TAdvStringGrid benutzen, auch wenn es etwas kostet.


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