Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Stringgrid Spaltenbreite mit Maus ändern
kandesbunzler - Fr 18.12.20 16:20
Titel: Stringgrid Spaltenbreite mit Maus ändern
Hallo,
wie kann ich in einem Stringgrid die Spaltenbreite mit der Maus (zur Laufzeit) ändern?
Ich habe verschiedene Settings erfolglos versucht:
- goColSizing = true
- goColMoving = true
- FixedRows = 1
etc.
Was müßte eingestellt werden?
Danke!
mandras - Fr 18.12.20 21:14
das Stringgrid, das standardmäßig auf ein Formular gelegt wird (bei mir mit D6 und 10.4 geprüft) weist dieses Verhalten auf.
Resize erfolgt über die Linien im Header.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| object StringGrid1: TStringGrid Left = 168 Top = 80 Width = 545 Height = 225 Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goColSizing] TabOrder = 0 end |
kandesbunzler - Sa 19.12.20 12:58
Danke für die Rückmeldung.
Bei mir funktioniert dies jedoch nur für die erste Zeile (der ersten Zelle = ok), jedoch nicht für die Spalte.
Woran könnte das liegen?
VG!
mandras - Sa 19.12.20 22:56
Jetzt verstehe ich das Problem.
Nein, die Breite einer FixedCol kann vom Anwender nicht geändert werden.
Mir ist kein einfacher Weg bekannt, dies zu ändern.
hRb - So 31.01.21 23:41
Hallo, ist Dein Problem gelöst? (war längere Zeit abwesend, daher erst heute)
Bei mir (Delphi10.1) funktioniert mit den im Anhang gezeigten StringGrid1.Options die Spaltenänderung bestens (nur Spalten). Auch die Breite der Festspalte lässt sich mit der Maus ändern. Siehe Anhang
hRb
mandras - So 31.01.21 23:59
Ich habe es noch einmal mit XE2 und 10.4 geprüft - die Breite der festen Spalte(n) läßt sich in der erzeugten Anwendung nicht ändern.
jaenicke - Di 02.02.21 07:45
Ein kurzer Blick in den Quelltext zeigt, dass es mehrere Stellen gibt, die dieses Verhalten festlegen. Zum Beispiel gibt es eine Funktion XOutsideHorzFixedBoundary in TCustomGrid.CalcSizingState und die Berechnung in CalcAxisState. Man kann also auch nicht mit einer kleinen Änderung in der Unit das Verhalten ändern, wenn man diese kopiert und dem Projekt hinzufügt.
Warum muss es denn ein TStringGrid sein? Es gibt doch viele schöne Grids wie die TVirtualStringTree, die sich sehr gut anpassen lässt.
Für die horizontale Richtung wären z.B. folgende Änderungen nötig (angepasste Datei links):
hRb hat folgendes geschrieben : |
Bei mir (Delphi10.1) funktioniert mit den im Anhang gezeigten StringGrid1.Options die Spaltenänderung bestens (nur Spalten). Auch die Breite der Festspalte lässt sich mit der Maus ändern. |
Das kann ich leider nicht reproduzieren und ich sehe auch nicht wie das im Quelltext erklärbar wäre. :nixweiss:
kandesbunzler - Sa 06.02.21 19:26
Hallo zusammen
und danke nochmals für die Rückmeldungen.
@hRb: Ich habe die Deine Einstellungen testweise übernommen. Leider funktioniert dies auch nicht, so wie mandras auch schon festgestellt hatte.
Woran könnte es noch haken?
VG!
hRb - Fr 19.03.21 21:37
Immer noch ungeklärt?
Deine Frage war
Zitat: |
wie kann ich in einem Stringgrid die Spaltenbreite mit der Maus (zur Laufzeit) ändern? |
diese Frage bezog sich zunächst nicht auf fix-Zeilen/Spalten. Die sind nicht veränderbar (wurde dargelegt), Aber alle anderen Zeilen/Spalten-Änderungen funktionieren. Siehe beigefügtes Bild (Screenkopie mit Form, Options und gestartetem Programm).
Zitat: |
@hRb: Ich habe Deine Einstellungen testweise übernommen. Leider funktioniert dies auch nicht... |
Bei mir schon! Vielleicht ein Hinweis zum Bedienen: Zur Änderung der Spaltenbreite
MUSS die Maus in der
1. Zeile stehen und zwar
genau auf einer senkrechten Linie! Dann ändert sich der Mauszeiger und wird zu einer Art "Doppelstrich" (Spaltenbreitenänderung). Hatte gehofft, dass bei einer Screenkopie dieser veränderte Mauszeiger sichtbar bleibt (leider nicht).
Wird umgekehrt die Höhe einer Zeile verändert, dann MUSS der Mauszeiger in
Spalte 1 (fix) stehen und zwar
genau auf der waagrechten Linie. Dann wird Mauszeiger zu einem waagerechten Doppelstrich (will kein Oberlehrer sein, aber an dieser Stelle hing ich selbst mal)
Habe gerade dies nochmal getestet, indem ich ein TStringGrid auf eine Form legte. Ich gehe davon aus, dass Dir die Option bekannt sind: in der Hilfe unter VLC-Bibliothek, Reiter Suchen/ Suchtext= 'Vcl.Grids.TGridOption'.
Gruß und viel Erfolg
jaenicke - Fr 19.03.21 22:12
hRb hat folgendes geschrieben : |
Die sind nicht veränderbar (wurde dargelegt) |
Ich habe ja gezeigt, dass man das mit wenig Aufwand ändern kann.
Aber eine andere Gridkomponente wäre sinnvoller.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!