AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TJvDBGrid - Text soll Spaltenbreite ausfüllen

Ein Thema von ZOD · begonnen am 28. Mär 2015 · letzter Beitrag vom 1. Apr 2015
Antwort Antwort
Seite 1 von 2  1 2   
ZOD

Registriert seit: 6. Mai 2009
81 Beiträge
 
#1

TJvDBGrid - Text soll Spaltenbreite ausfüllen

  Alt 28. Mär 2015, 16:19
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?
  Mit Zitat antworten Zitat
Neumann

Registriert seit: 6. Feb 2006
Ort: Moers
505 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: TJvDBGrid - Text soll Spaltenbreite ausfüllen

  Alt 28. Mär 2015, 21:14
Vermute mal, dass Wordwrap auf True steht, die Zeilenhöhe aber nicht für zwei Zeilen reicht.
Ralf
Gruß vom Niederrhein
  Mit Zitat antworten Zitat
ZOD

Registriert seit: 6. Mai 2009
81 Beiträge
 
#3

AW: TJvDBGrid - Text soll Spaltenbreite ausfüllen

  Alt 31. Mär 2015, 15:19
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?
  Mit Zitat antworten Zitat
BadenPower

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

AW: TJvDBGrid - Text soll Spaltenbreite ausfüllen

  Alt 31. Mär 2015, 16:15
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.
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
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: TJvDBGrid - Text soll Spaltenbreite ausfüllen

  Alt 31. Mär 2015, 16:39
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?
(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.
Miniaturansicht angehängter Grafiken
tjvdbgridrowheight.jpg   tjvdbgridtitelspalte.jpg  
  Mit Zitat antworten Zitat
ZOD

Registriert seit: 6. Mai 2009
81 Beiträge
 
#6

AW: TJvDBGrid - Text soll Spaltenbreite ausfüllen

  Alt 1. Apr 2015, 07:24
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?
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#7

AW: TJvDBGrid - Text soll Spaltenbreite ausfüllen

  Alt 1. Apr 2015, 08:27
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 ...

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.
Miniaturansicht angehängter Grafiken
tjvdbgridproperties.jpg  
  Mit Zitat antworten Zitat
ZOD

Registriert seit: 6. Mai 2009
81 Beiträge
 
#8

AW: TJvDBGrid - Text soll Spaltenbreite ausfüllen

  Alt 1. Apr 2015, 09:55
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.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#9

AW: TJvDBGrid - Text soll Spaltenbreite ausfüllen

  Alt 1. Apr 2015, 10:03
Das alte JvDBGrid ist eine abgeleitete Komponente.
Tja, das konnte natürlich keiner ahnen, da hast du wohl irgendwas vermurkst
  Mit Zitat antworten Zitat
ZOD

Registriert seit: 6. Mai 2009
81 Beiträge
 
#10

AW: TJvDBGrid - Text soll Spaltenbreite ausfüllen

  Alt 1. Apr 2015, 10:06
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.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 02:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf