Delphi-PRAXiS
Seite 1 von 2  1 2      

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/)
-   -   TJvDBGrid - Text soll Spaltenbreite ausfüllen (https://www.delphipraxis.net/184464-tjvdbgrid-text-soll-spaltenbreite-ausfuellen.html)

ZOD 28. Mär 2015 15:19

TJvDBGrid - Text soll Spaltenbreite ausfüllen
 
In meiner Anwendung verwende ich TJvDBgrids. Diese werden via TDataSource, TClientDataSet, TDataSetProvider und TSQLDataSet aus einer Datenbank (Firebird) befüllt.

Folgendes Problem:
wenn eine Zelle einen Text anzeigen soll, der aus mehreren Wörtern (also durch Leerzeichen getrennte Zeichengruppen) besteht, dann wird die Spaltenbreite nicht "ausgenützt". Es scheint so zu sein, daß das letzte Wort nur angezeigt wird, wenn es komplett dargestellt werden kann.

Beispiel:
der Text "Dies ist ein langer Testtext" wird bei der in der TColumn eingestellten Spaltenbreite so dargestellt:

|Dies ist ein langer |

wird die Spalte dann um ein, zwei Pixel verbreitert, erfolgt die Darstellung des kompletten Textes:

|Dies ist ein langer Testtext|

Ich hätte gerne folgende Darstellung bei zu schmalrer Spaltenbreite:

|Dies ist ein langer Testte|

Das blöde ist, ich habe auch DBgrids, wo das so wie ich will dargestellt ist.
Ich bin sicher, das kann eingestellt werden, bin aber einfach zu doof, die Property zu finden.
Kann mir jemand helfen?

Neumann 28. Mär 2015 20:14

AW: TJvDBGrid - Text soll Spaltenbreite ausfüllen
 
Vermute mal, dass Wordwrap auf True steht, die Zeilenhöhe aber nicht für zwei Zeilen reicht.

ZOD 31. Mär 2015 14:19

AW: TJvDBGrid - Text soll Spaltenbreite ausfüllen
 
Sorry Neumann, kam erst jetzt zum Testen des Vorschlages.

stimmt, Wordwrap stand auf true. Es ändert sich aber gar nichts, wenn ich es auf false setze.
WordWrapAllFields stand bereits auf False.

Auch die Zeilenhöhe scheint konstant zu bleiben, wenn ich sie über RowHeight im Objektinspektor ändere.

Ich habe die Komponente abgeleitet und in der abgeleiteten Komponente im Create DefaultRowHeight geändert.
Das ergibt dann auch eine geänderte Anzeige zur Laufzeit.

In der Zwischenzeit habe ich mit dem hier vorgeschlagenen Vorgehen experimentiert:
http://www.delphigroups.info/2/8d/313615.html

Das sieht dann zwar so aus, wie ich es brauche. Leider wird nur die Erste Datenzeile angezeigt bzw. immer wieder wiederholt, wenn ich das in der abgeleiteten Komponente im DrawCell einbaue.
Den Zellinhalt hole ich mit

Delphi-Quellcode:
  if (ARow = 0) then
  begin
    S := Self.Columns[ACol].Title.Caption;
  end
  else begin
    S := Self.DataSource.DataSet.Fields[ACol].AsString;
  end;
Irgendwas mache ich falsch .. nur was?

BadenPower 31. Mär 2015 15:15

AW: TJvDBGrid - Text soll Spaltenbreite ausfüllen
 
Suchst Du vielleicht das:

Delphi-Quellcode:
procedure TForm1.JvDBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
begin
  ShowMessage(Field.AsString);
end;
Statt ShowMessage natürlich Deine Schreibroutine.

Perlsau 31. Mär 2015 15:39

AW: TJvDBGrid - Text soll Spaltenbreite ausfüllen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:

Zitat von ZOD (Beitrag 1295555)
Auch die Zeilenhöhe scheint konstant zu bleiben, wenn ich sie über RowHeight im Objektinspektor ändere.

Zumindest damit kann ich dir weiterhelfen: RowHeight wirkt sich nur dann aus, wenn du die Eigenschaft AutoSizeRows auf False stellst. Ist eigentlich logisch, oder? :-D
(siehe Grafik1: TjvDbGridRowHeight.jpg)

Übrigens wird bei meinen TjvDbGrids ein Titeltext, der größer als die Spalte ist, mit abschließenden Pünktchen angezeigt, wie du in Grafik2: TjvDbGridTitelSpalte.jpg sehen kannst.

ZOD 1. Apr 2015 06:24

AW: TJvDBGrid - Text soll Spaltenbreite ausfüllen
 
Guten Morgen Perlsau,
du hast recht - mit AutoSizeRows=False kann ich per RowHeight die Zeilenhöhe einstellen!

Aber:
die WordWrap Funktion bleibt wohl immer aktiv - egal ob ich WordWrap=True oder False setze.
Dabei habe ich WordWrapAllFields immer auf False.

Mir stellt sich also die Frage: wie kann ich das WordWrap abschalten?

Perlsau 1. Apr 2015 07:27

AW: TJvDBGrid - Text soll Spaltenbreite ausfüllen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin!

Immerhin, das funktioniert schonmal. Warum bei dir der Titeltext nicht so abgeschnitten wird wie bei mir weiß ich jetzt auch nicht. Mußt du halt noch ein bissel rumprobieren ...

Zitat:

Zitat von ZOD (Beitrag 1295667)
die WordWrap Funktion bleibt wohl immer aktiv - egal ob ich WordWrap=True oder False setze. Dabei habe ich WordWrapAllFields immer auf False.

Wenn Wordwrap aktiv wäre, würde das DBGrid die Titelzeile umbrechen und in der nächsten Zeile fortfahren. Ich hatte ja erst gedacht, es könnte vielleicht daran liegen, daß ich UseXPThemes auf False habe (bzw. DrawingStyle auf gdsClassic, was auf's Selbe rausläuft), aber das ändert bei mir keineswegs das Umbruchverhalten: Wenn Wordwrap aus ist, macht das Grid auch keinen Zeilenumbruch.

Hast du nach den jeweiligen Änderungen der Properties auch neu kompiliert (Projekt > alle Projekte erzeugen)?

Du kannst ja mal die Properties "meines" DBGrids mit den deinen vergleichen, siehe Grafik.

ZOD 1. Apr 2015 08:55

AW: TJvDBGrid - Text soll Spaltenbreite ausfüllen
 
Hallo Perlsau,

ich bin der Sache jetzt auf der Spur. Folgendes:
Füge ich im entsprechenden Formular ein NEUES TJvDBGrid ein, dann funktioniert alles.

Ich habe dann das Formular gespeichert, geschlossen und neu in die IDE geladen.
Und siehe da: beim ALTEN JvDBGrid war das WordWrap wieder auf True - obwohl ich es vor dem Speichern auf False gesetzt habe! Offenbar wird die Änderung der Property nicht richtig gespeichert.

Ich bin nicht sicher, woran das liegt. Das alte JvDBGrid ist eine abgeleitete Komponente. Am Speichern der Properties habe ich nix geändert. Ich suche mal weiter, wenn ich etwas finde, melde ich mich.

Danke für die Hilfe bisher.

Perlsau 1. Apr 2015 09:03

AW: TJvDBGrid - Text soll Spaltenbreite ausfüllen
 
Zitat:

Zitat von ZOD (Beitrag 1295702)
Das alte JvDBGrid ist eine abgeleitete Komponente.

Tja, das konnte natürlich keiner ahnen, da hast du wohl irgendwas vermurkst :?

ZOD 1. Apr 2015 09:06

AW: TJvDBGrid - Text soll Spaltenbreite ausfüllen
 
stimmt - ist sicher mein Fehler.
Nur zur Klarstellung:

Bei beginn der Problemsuche war das ein normales JvDBGrid.
Für die Fehlersuche habe ich dann die Komponente abgeleitet - zum "rumspielen".

Bin auf der Fehlersuche und gespannt, woran es dann am Ende lag.:cyclops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:16 Uhr.
Seite 1 von 2  1 2      

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