Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   TStringGrid fixieren (https://www.delphipraxis.net/173877-tstringgrid-fixieren.html)

Suppenswarls 21. Mär 2013 19:34


TStringGrid fixieren
 
Liste der Anhänge anzeigen (Anzahl: 2)
Sers zusammen,

ich habe da mal so eine Frage: Ist es möglich eine TStringGrid in sich selbst zu fixieren? Wenn ja, wie?

Ich meine das so:

Wenn man die Tabelle normal darstellt, sieht das ganze so aus:
http://www7.pic-upload.de/21.03.13/rmj7pnwtjt9p.jpg

Klickt man nun auf die äußerste Spalte, verschiebt sich das ganze ineinander:
http://www7.pic-upload.de/21.03.13/a4x7qlb83nb8.jpg

Das sieht natürlich scheiße aus. Kennt jemand ne Möglichkeit das zu beheben?

Danke im Voraus!



MfG Suppenswarls

Sir Rufo 21. Mär 2013 19:37

AW: TStringGrid fixieren
 
Herzlich Willkommen in der Delphi-PRAXIS :)

Die Bilder kannst du hier auch direkt hochladen (was du bitte auch noch machen solltest).

Beim Delphi-Referenz durchsuchenTStringGrid gibt es Delphi-Referenz durchsuchenTStringGrid.FixedRows und Delphi-Referenz durchsuchenTStringGrid.FixedCols

Hilft das?

Suppenswarls 21. Mär 2013 19:49

AW: TStringGrid fixieren
 
Danke für deine Antwort!
FixedRows & FixedCols sind lediglich dazu da, eine Fixierte Zeile bzw Spalte zu erzeugen, die dann auch farbig gekennzeichnet wird (also eine Zeile wie "Name ; Kategorie ; ..."). Das fixiert die Tabelle aber nicht und hilft mir somit nicht wirklich :S

Sir Rufo 21. Mär 2013 19:50

AW: TStringGrid fixieren
 
Dann erklär doch bitte mal, wie du dir dieses "fixierte" vorstellst

Suppenswarls 21. Mär 2013 20:20

AW: TStringGrid fixieren
 
Die Tabelle soll sich nicht hin und her verschieben, wenn man mit der Maus auf eine außen gelegene Spalte klickt. Bilder sagen mehr als Worte, wirf ein Blick drauf und du wirst mich verstehen.

Aviator 21. Mär 2013 20:31

AW: TStringGrid fixieren
 
Kann es sein, dass du die horizontale Scrollbar ausgeschaltet hast? Er verschiebt die Spalten ja nicht ineinander sonder schiebt die linke Spalte aus dem Grid raus. Ich gehe mal davon aus, dass die letzte Spalte wenige Pixel zu breit ist und deshalb alles nach links "rutscht", damit die Spalte komplett sichtbar ist. Schau dir mal die Eigenschaft ScrollBars des StringGrids an.

Perlsau 21. Mär 2013 20:59

AW: TStringGrid fixieren
 
Zitat:

Zitat von Suppenswarls (Beitrag 1208317)
Die Tabelle soll sich nicht hin und her verschieben, wenn man mit der Maus auf eine außen gelegene Spalte klickt. Bilder sagen mehr als Worte, wirf ein Blick drauf und du wirst mich verstehen.

Du machst das Stringgrid genau so groß, wie benötigt und stellst beim Programmstart alle Spaltenbreiten so ein, wie du sie brauchst (geht nicht im Objektinspekter). Du kannst dir entweder ausrechnen, wie breit dein Stringgrid sein muß, oder du probierst eine Weile mit den Spaltenbreiten herum, bis es paßt. Das von dir beschriebene Phänomen kommt daher, daß in der von dir gewählten Stringgrid-Breite nicht alle Spalten vollständig sichbar sind, weshalb auch (normalerweise) der horizontale Scrollbalken erscheint, wenn man den nicht zuvor ausschaltet. Das "Springen", wie du es nennst, kannst du nur vermeiden, wenn beim Programmstart alle Spalten vollständig sichtbar sind, wobei du den Platz, den die horizontale Scrollbar beansprucht, nicht vergessen darfst. Um den Anwender eine Änderung Spaltenbreiten zu ermöglichen, stellst du in den im Stringgrid das Property Options.ColSizing auf True, andernfalls auf False (Defaultwert). Laß zur Kontrolle beide Scrollbars zu (ScrollBars := ssBoth;). Wenn beim Programmstart, nachdem du alle Spaltenbreiten eingestellt hast, die horizontale Scrollbar verschwunden ist, und sich kein ungenutzter Platz zwischen dem Ende der letzten Spalte und der vertikalen Scrollbar befindet, sind deine Einstellungen abgeschlossen und dein StringGrid ist sozusagen "fixiert".

Suppenswarls 21. Mär 2013 21:12

AW: TStringGrid fixieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also eine pixelgenaue Berechnung der Breiten habe ich bereits gemacht, wobei ich aber die vertikale Scrollbar nicht beachtet habe:

Code:
  gridProdukte.ColCount := 5;
  gridProdukte.RowCount := 2;
  gridProdukte.DefaultColWidth := 100;
  gridProdukte.ColWidths[0] := 180;
  gridProdukte.ColWidths[1] := 150;
  gridProdukte.ColWidths[3] := 60;
Die width-Größe steht auf 590, somit müsste es genau hinkommen. Ich weiß nicht, was Delphi da abzieht, aber sogar ohne jegliche Scrollbars und bei absolut genauer Größe hüpft das Teil zur Seite (siehe Bild). Stelle ich die Breite etwas größer, so verschiebt es sich nicht, jedoch hat man dann einen hässlichen Rand.
Wäre es nicht irgendwie möglich die Breite der letzten Spalte (gridProdukte.ColWidths[4]) automatisch auf die Größe des Rahmens anzupassen, also auch die vertikale Scrollbar zu berücksichtigen?


Edit: Die horizontale Scrollbar ändert nichts an der Tatsache, dass die Spalten so verschoben werden und es sieht auch nicht allzu schön aus, finde ich ^^

Perlsau 21. Mär 2013 21:34

AW: TStringGrid fixieren
 
Zitat:

Zitat von Suppenswarls (Beitrag 1208326)
Also eine pixelgenaue Berechnung der Breiten habe ich bereits gemacht, wobei ich aber die vertikale Scrollbar nicht beachtet habe:

Delphi-Quellcode:
  gridProdukte.ColCount := 5;
  gridProdukte.RowCount := 2;
  gridProdukte.DefaultColWidth := 100;
  gridProdukte.ColWidths[0] := 180;
  gridProdukte.ColWidths[1] := 150;
  gridProdukte.ColWidths[3] := 60;

Benutze doch bitte statt code zur Anzeige von Delphi-Code das Wort delphi.

Zitat:

Zitat von Suppenswarls (Beitrag 1208326)
Die width-Größe steht auf 590, somit müsste es genau hinkommen.

Von welcher Width-Größe schreibst du hier? gridProdukte.Width oder gridProdukte.ClientWidth? Letzteres ist maßgebend.

Zitat:

Zitat von Suppenswarls (Beitrag 1208326)
Ich weiß nicht, was Delphi da abzieht, aber sogar ohne jegliche Scrollbars und bei absolut genauer Größe hüpft das Teil zur Seite (siehe Bild).

Delphi zieht nicht irgend was ab, sondern du tust das. Delphi macht genau das, was du in den Code reinschreibst. Das, was du nicht reinschreibst, wird auch nicht ausgeführt. Bei mir "hüpft" nichts zur Seite, wenn ich das nicht will.

Zitat:

Zitat von Suppenswarls (Beitrag 1208326)
Stelle ich die Breite etwas größer, so verschiebt es sich nicht, jedoch hat man dann einen hässlichen Rand.

Und hier hast du auch bereits die Lösung: Etwas breiter hinterläßt einen Rand, etwas schmäler reduziert den Rand.

Zitat:

Zitat von Suppenswarls (Beitrag 1208326)
Wäre es nicht irgendwie möglich die Breite der letzten Spalte (gridProdukte.ColWidths[4]) automatisch auf die Größe des Rahmens anzupassen, also auch die vertikale Scrollbar zu berücksichtigen?

Wenn alle Zeilen im StringGrid sichtbar sind, hast du natürlich keine vertikale Scrollbar (vSb) und einen Rand. Du könntest z.B. überprüfen, ab wievielen Zeilen die vSb erscheint und daraufhin eine Spalte um diesen Betrag verringern. Bei mir sind das glaub ich 24 Pixel, mußt du bei dir aber selber mal ausrechnen.

Zitat:

Zitat von Suppenswarls (Beitrag 1208326)
Edit: Die horizontale Scrollbar ändert nichts an der Tatsache, dass die Spalten so verschoben werden und es sieht auch nicht allzu schön aus, finde ich ^^

Das hat auch keiner behauptet!

Sir Rufo 21. Mär 2013 21:38

AW: TStringGrid fixieren
 
Zitat:

Zitat von Suppenswarls (Beitrag 1208317)
Die Tabelle soll sich nicht hin und her verschieben, wenn man mit der Maus auf eine außen gelegene Spalte klickt. Bilder sagen mehr als Worte, wirf ein Blick drauf und du wirst mich verstehen.

Super, ich zeige dir 3 Farben, die es nicht sein sollen und dann kannst du mir sagen, welche Farbe ich haben möchte? :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 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