![]() |
Stringgrid ColWidth
Hallo Alle,
wie kann man die ColWidth sehr groß setzen (10000 oder mehr). StringGrid1.ColWidths[Nummer}:=10000; funktioniert nicht. Gib es da eine Begrenzung? Gruß Jürgen Benutze Delphi 7 |
AW: Stringgrid ColWidth
in Delphi Seattle geht das
Delphi-Quellcode:
Hast du schon mal in den Setter
StringGrid1.ColWidths[0] := 10000;
Delphi-Quellcode:
in der Unit Grids.pas reindebuggt?
procedure TCustomGrid.SetColWidths(Index: Longint; Value: Integer);
Gibt es da eine Prüfung, die das verhindert? |
AW: Stringgrid ColWidth
Der Befehl: StringGrid1.ColWidths[2]:=10000; geht zwar
aber es werden nur 152 Zeichen des Textes angezeigt. Der Text ist 512 Zeichen lang. |
AW: Stringgrid ColWidth
Zitat:
etwas genauer wäre schon nicht schlecht. Gruß K-H |
AW: Stringgrid ColWidth
Screenshot? Codezeilen? Beispielprogramm?
|
AW: Stringgrid ColWidth
Selbst bei Delphi 6 geht
StringGrid1.ColWidths[1] := 10000; Das Problem ist eher, dass die Spalte breiter ist wie die Breite des Grids und somit immer nur der linke Bereich angezeigt wird. Wenn Du dann nach rechts Scollst, dann wandert diese (überbreite) Spallte aus der Anzeige heraus, da das Grid immer nur Spaltenweise scollt.. |
AW: Stringgrid ColWidth
Delphi 7
dashier funktioniert:
Delphi-Quellcode:
Als Ergebnis erhalte ich dieses:
procedure TForm1.FormCreate(Sender: TObject);
var i : Integer; s : String; begin stringgrid1.ColWidths[0] := 10000; for i := 0 to 1024 do begin s := s + Chr((i mod 10) + 48); end; stringgrid1.Cells[0,1] := s; end;
Code:
Statt 1024 funktioniert das 10fache auch problemlos.
01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
|
AW: Stringgrid ColWidth
Zitat:
Vielleicht ein Hinweis: Horizontales Scrolling im Grid scrollt die Spalten aber nicht den Spalteninhalt. Wenn die Spalte also nicht komplett darstellbar ist, dann nutzt scrollen auch nichts. |
AW: Stringgrid ColWidth
Formular Width ist 1024
StringGrid Width ist 1008 Wenn ich Formular und StringGrid breiter mache ist der Text komplett. Will ich aber nicht. Warum kann man nicht weiter scrollen? HolgerX hat recht. gibt es da keine Möglichkeit das scrollen anders zu machen? |
StringGrid-Inhalte vollständig darstellen
Es gibt Situationen, in denen es hilfreich ist, den Abstand zum bearbeiteten Objekt etwas zu vergrößern – das altbekannte Wald-Bäume-Thema. Hier schient mir eine solche Situation zu bestehen. Erreicht werden soll, daß der Anwender beim Betrachten eines Stringgrids deren Inhalte auch dann vollständig sehen kann, wenn sie aufgrund der Spaltenbreite nicht vollständig dargestellt werden können. Die bereits vorgeschlagene Lösung, die Spaltenbreite der betreffenden Zeile ins schier Unendliche zu verbreitern, stößt dabei auf gewisse Probleme. Betrachten wir die anderen Optionen:
1. Möglichkeit: Hint einsetzen Da es sich offenbar nur um eine problematische Spalte handelt, die zu lange Texte enthält, um vollständig darstellbar zu sein, könnte man beim Zeilenwechsel (z.B. in OnClick) die Hint-Eigenschaft des StringGrids dazu verwenden, den gesamten Text anzuzeigen. Nehmen wir an, es ist die vierte Spalte mit dem Index 3 (weil nullbasierend):
Delphi-Quellcode:
Das Property ShowHint der Grid-Komponente sollte dabei natürlich True sein. Einen Nachteil hat diese Lösung: Der Hint wird möglicherweise nicht lange genug angezeigt, um den gesamten Text lesen zu können.
procedure TFormMain.GridClick(Sender: TObject);
begin Grid.Hint := Grid.Cells[3,Grid.Row]; end; 2. Möglichkeit: WordWrap simulieren mit Text via Code in Zelle schreiben Im Ereignis OnDrawCell der StringGrid-Komponente werden die Parameter Spalte (ACol) und Zeile (ARow) als Integerwerte übergeben sowie der Bereich, den die Zelle einnimmt: Integer; Rect: TRect. Nun kann man wie oben gezeigt den Text dieser Zelle daraufhin überprüfen, ob er in die Spaltenbreite hineinpaßt. Je nach Länge unterteilt man den Text dann in geeignete Teile und schreibt sie in der Zelle untereinander – ein selbstgebasteltes WordWrap also. 3. Möglichkeit: TjvDBGrid einsetzen Das TjvDBGrid – die Jedi-Erweiterung des TDBGrid – bietet die Möglichkeit, Zeilen umzubrechen. Nun benötigt das TjvDBGrid jedoch eine Datenquelle. Diese kann man selbst erstellen, indem man ein TClientDataset verwendet und es entsprechend mit Daten befüllt. Nun weist man dem TClientDataset einfach ein DataSource zu, welches man als DataSource im entspreochenden TjvDBGrid-Property einträgt. Danach setzt man im OI das Property WordWrap auf True, wonach Zeilen, die zu lang sind, automatisch umbrochen werden. Ich hab's nicht getestet, aber das könnte der TE ja jetzt tun ... Vielleicht gibt es noch weitere Möglichkeiten, dieses Problem zu lösen, mir fallen aber im Moment keine ein ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:38 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 by Thomas Breitkreuz