AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Stringgrid, Zeile automatisch an Textgrösse anpassen
Thema durchsuchen
Ansicht
Themen-Optionen

Stringgrid, Zeile automatisch an Textgrösse anpassen

Ein Thema von Luckner · begonnen am 8. Dez 2014 · letzter Beitrag vom 19. Mai 2015
Antwort Antwort
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#1

AW: Stringgrid, Zeile automatisch an Textgrösse anpassen

  Alt 13. Dez 2014, 10:50
Hallo zusammen,

ich dachte eigentlich bisher, dass die Variabeln selbsterklärend sind, wenn man sich den Sourcecode durchschaut.

"liZ1" und "liZ2" sind reine Zählervariabeln für die Schleifen.

"liTextWidth" ist der gerade ermittelte Wert der Länge des Textes der Zelle[liZ1,liZ2]

In "liMaxWidth" wird der größte Wert von "liTextWidth" einer Spalte gespeichert

Mit AMinWidth kannst Du festlegen wie breit die Spalte auf jeden Fall sein soll.

"liWidth" ist dann die Breite der Spalte, welche ins Grid gesetzt wird. Entweder AMinWidth oder liMaxWidth, je nach dem was größer ist.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Luckner

Registriert seit: 28. Nov 2006
Ort: Berlin
418 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Stringgrid, Zeile automatisch an Textgrösse anpassen

  Alt 23. Apr 2015, 15:33
Hallo, habe mir zu diesem Thema 3 folgende Routinen gestrickt (irgendwo im Internet gefunden und angepasst)
Delphi-Quellcode:
procedure TFrameAuftrag.GridPositionenDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
var s: String;
begin
  if Sender = nil then
    Exit;
  if not (Sender is TJvStringGrid) then
    Exit;

  with Sender as TJvStringGrid do
    begin
      s := Cells[ACol, ARow];
    // Canvas.Brush.Color := Farbe;
      Canvas.FillRect(Rect);
      GrowRect(Rect, -2);
      UpdateRowHeight(Sender as TJvStringGrid, ARow, DrawText(Canvas.Handle, PChar(s), Length(s), Rect, DT_WordBreak) + 4);
    end;
end;

procedure TFrameAuftrag.GrowRect(var Rect: TRect; const pixel: Integer);
begin
Dec(Rect.Left, pixel);
Inc(Rect.Right, pixel);
Dec(Rect.Top, pixel);
Inc(Rect.Bottom, pixel);
end;

procedure TFrameAuftrag.UpdateRowHeight(sg: TStringGrid; const iRow, iHeight: Integer);
begin
with GridPositionen do
if iHeight > RowHeights[iRow] then
   RowHeights[iRow] := iHeight;
end;
Jetzt werden die Zeilen im Grid höher, wenn der Inhalt der Zelle mehr wird, jedoch nicht kleiner, wenn der Inhalt weniger wird. Es funktioniert jedoch, wenn ich das Programm neu starte, wird die Zeilenhöhe wieder korrekt dargestellt. Hat Jemand eine Idee, was ich noch hier ändern müsste?

Danke, Luckner
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#3

AW: Stringgrid, Zeile automatisch an Textgrösse anpassen

  Alt 23. Apr 2015, 15:42
Zitat:
Delphi-Quellcode:
procedure TFrameAuftrag.UpdateRowHeight(sg: TStringGrid; const iRow, iHeight: Integer);
begin
with GridPositionen do
if iHeight > RowHeights[iRow] then
   RowHeights[iRow] := iHeight;
end;
1. Wozu der Parameter sg, wenn Du doch auf GridPositionen zureifst?
2. Du sagst, was passieren soll, wenn iHeight > Zeilenhöhe ist, aber nicht, was passieren soll, wenn nicht.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Luckner

Registriert seit: 28. Nov 2006
Ort: Berlin
418 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: Stringgrid, Zeile automatisch an Textgrösse anpassen

  Alt 23. Apr 2015, 15:56
Hallo DeddyH,
1 sg habe ich geändert.

Jetzt meine Änderung in der Routine, die irgendwie ein blinkendes Grid nach sich zieht.
Delphi-Quellcode:
procedure TFrameAuftrag.UpdateRowHeight(GridPositionen: TStringGrid; const iRow, iHeight: Integer);
begin
with GridPositionen do
if iHeight > RowHeights[iRow] then
   RowHeights[iRow] := iHeight
else if iHeight < RowHeights[iRow] then
   RowHeights[iRow] := iHeight;
end;
Das ist nicht unbedigt klug von mir gewesen. Aber mehr fällt mir jetzt nicht ein. Diese Grid-Routinen (Formatierungen) kappier ich überhaupt nicht. Eine kleine Hilfe bitte.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.740 Beiträge
 
Delphi 6 Enterprise
 
#5

AW: Stringgrid, Zeile automatisch an Textgrösse anpassen

  Alt 23. Apr 2015, 16:41
Das läßt sich jetzt aber zusammenfassen zu:

Delphi-Quellcode:
procedure TFrameAuftrag.UpdateRowHeight(GridPositionen: TStringGrid; const iRow, iHeight: Integer);
begin
  GridPositionen.RowHeights[iRow] := iHeight
end;
Ob das so gewollt ist?
Ralph
  Mit Zitat antworten Zitat
Luckner

Registriert seit: 28. Nov 2006
Ort: Berlin
418 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: Stringgrid, Zeile automatisch an Textgrösse anpassen

  Alt 26. Apr 2015, 14:46
Hallo Jumpy,

das funktioniert nicht. Grid ist immer 1-Zeilig und blinkt ständig.
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#7

AW: Stringgrid, Zeile automatisch an Textgrösse anpassen

  Alt 26. Apr 2015, 16:06
Hallo Jumpy,
das funktioniert nicht. Grid ist immer 1-Zeilig und blinkt ständig.
Das ist ja logisch, dass das "blinken" muss, denn Du ermittest in der DrawCell-Methode immer nur die Höhe der aktuellen Zelle.

Danach setzt Du in UpdateRowHeights die Property RowHeight auf den ermittelten Wert der aktuellen Zelle, was wiederum ein Neuzeichnen aller Zellen der Zeile hervorruft.

Du musst bevor Du RowHeight einen Wert zuweist, erst ermitten, welche Zelle der ganzen Zeile den höchsten Wert hat und DIESEN Wert dann nehmen.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:13 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-2025 by Thomas Breitkreuz