AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Grid-Komponente MultiLine + automatische Höhenanpassung
Thema durchsuchen
Ansicht
Themen-Optionen

Grid-Komponente MultiLine + automatische Höhenanpassung

Offene Frage von "raller09"
Ein Thema von raller09 · begonnen am 23. Jul 2007 · letzter Beitrag vom 1. Aug 2007
 
raller09

Registriert seit: 7. Nov 2005
38 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

Re: Grid-Komponente MultiLine + automatische Höhenanpassung

  Alt 24. Jul 2007, 16:51
Ähnliche Ansätze hatte ich auch schon gefunden und für mich entsprechend angepasst.

Basis: Text im StringGrid ausrichten und die verschiedenen Source-Code-Beispiele hier aus dem Forum zum Anpassen der Höhe.

Ergebnis:

Delphi-Quellcode:
procedure StringGridAlignment(xGrid: TStringGrid; xRect: TRect; xCol, xRow: Integer;
                              xAlignment: TAlignment; xWordWrap: Boolean);
var
  lTextOut: String;
  lDrawRect: TRect;
const
  cAlignments: array[TAlignment] of Word = (DT_LEFT, DT_RIGHT, DT_CENTER);
  cWordWraps: array[Boolean] of Word = (0, DT_WORDBREAK);
begin
  xGrid.Canvas.FillRect(xRect);

  lTextOut := xGrid.Cells[xCol, xRow];
  if (Length(lTextOut) > 0) then
  begin
    //*** Zeilenhöhe durch Ausgabe in lokales TRect ermitteln.
    lDrawRect := xRect;
    DrawText(xGrid.Canvas.Handle, PChar(lTextOut), StrLen(PChar(lTextOut)), lDrawRect,
             DT_CALCRECT or cAlignments[xAlignment] or cWordWraps[xWordWrap]);

    //*** Text im Grid Ausgeben
    DrawText(xGrid.Canvas.Handle, PChar(lTextOut), StrLen(PChar(lTextOut)), xRect,
             cAlignments[xAlignment] or cWordWraps[xWordWrap]);

    //*** Höhe der Grid-Zeile anpassen
    if (lDrawRect.Bottom - lDrawRect.Top) > xGrid.RowHeights[xRow] then
      xGrid.RowHeights[xRow] := (lDrawRect.Bottom - lDrawRect.Top);
  end;
end;

Methode im OnDrawCell aufrufen:

Delphi-Quellcode:
if ACol = 2 then
  StringGridAlignment(EinStringGrid, Rect, ACol, ARow, taLeftJustify, True);

if ACol = 1 then
  StringGridAlignment(EinStringGrid, Rect, ACol, ARow, taCenter, False);

Hab das jetzt nicht ganz genau durchgetestet, sieht aber sehr funktionsfähig aus. Vielleicht hilft es dem einen oder anderen noch...

Das ist aber für mich noch nicht ausreichend, da der Editor wieder ohne Zeilenumbrüche angezeigt wird.

Vielleicht weiß ja sonst noch jemand einen Rat...

MfG

raller09
  Mit Zitat antworten Zitat
 


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 05:24 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