AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TStringGrid fixieren

Ein Thema von Suppenswarls · begonnen am 21. Mär 2013 · letzter Beitrag vom 23. Mär 2013
Antwort Antwort
Suppenswarls

Registriert seit: 21. Mär 2013
5 Beiträge
 
#1

AW: TStringGrid fixieren

  Alt 21. Mär 2013, 20:20
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.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: TStringGrid fixieren

  Alt 21. Mär 2013, 20:31
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.

Geändert von Aviator (21. Mär 2013 um 20:33 Uhr)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: TStringGrid fixieren

  Alt 21. Mär 2013, 20:59
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".
  Mit Zitat antworten Zitat
Suppenswarls

Registriert seit: 21. Mär 2013
5 Beiträge
 
#4

AW: TStringGrid fixieren

  Alt 21. Mär 2013, 21:12
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 ^^
Angehängte Grafiken
Dateityp: jpg 1.jpg (60,3 KB, 15x aufgerufen)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#5

AW: TStringGrid fixieren

  Alt 21. Mär 2013, 21:34
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.

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.

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.

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.

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.

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!
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: TStringGrid fixieren

  Alt 21. Mär 2013, 21:38
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?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: TStringGrid fixieren

  Alt 21. Mär 2013, 22:32
Mach es doch so wie Du es im Titel angesprochen hast, benutze fixierte Zeilen und Spalten.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.993 Beiträge
 
Delphi 7 Professional
 
#8

AW: TStringGrid fixieren

  Alt 22. Mär 2013, 06:22
kleine Ergänzung:

Zitat:
width-Größe steht auf 590, somit müsste es genau hinkommen
Du vergisst GridLineWidth, bei n Spalten muss die Breite um n-1 x GridLineWidth vergößert werden. Dann sollte es (ohne Scrollbar) passen...
Ralph
  Mit Zitat antworten Zitat
Suppenswarls

Registriert seit: 21. Mär 2013
5 Beiträge
 
#9

AW: TStringGrid fixieren

  Alt 22. Mär 2013, 18:33
Danke auf jeden Fall schonmal für die Antworten!

@Perlsau: Man müsste halt immer schauen, ob die Tabelle eine Anzahl von Zeilen überschreitet, sodass eine vertikale Scrollbar erscheint und dann die Breite entsprechend dieser Tatsache vergrößern oder verkleinern. Da gibts aber 2 Probleme:

1. Wenn die StringGrid.width bzw die StringGrid.ClientWidth (der Unterschied ist mir nicht ganz klar) beide genau die gleiche Größe haben, wie alle Spalten zusammen, dann verschiebt sich die Geschichte dennoch. Es muss also 1 Pixel kleiner sein. Wenn man pingelig ist, sieht man den und er stört

2. Die Scrollbar hat bei verschiedenen Auflösungen und Zoom-Einstellungen nicht auf jedem PC die selbe Größe. Somit könnte man es zwar für einen PC machen, aber nicht für alle...jedenfalls nicht so.

Gibt es da nicht soetwas wie eine automatische Ausrichtung an die Ränder? Eine Art Fullscreen im Tabellenrahmen?



@p80286: Ganz so einfach ist es nicht. Wenn man alle Zeilen fixiert, kann man garnicht mehr scrollen.

@taaktaak: Bei mir sind nicht alle Spalten gleich breit. Darum muss ich alle Spalten getrennt addieren. Aber im Prinzip ist es nichts anderes.

@Sir Rufo: Verzeih mir, wenn ich mich unverständlich ausgedrückt hab. Beim nächsten Mal mach ichs mit mehr Hingabe.

Geändert von Suppenswarls (22. Mär 2013 um 18:36 Uhr)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#10

AW: TStringGrid fixieren

  Alt 23. Mär 2013, 02:54
Wenn die StringGrid.width bzw die StringGrid.ClientWidth (der Unterschied ist mir nicht ganz klar) ...
Die Online-Hilfe ist dein Freund: Cursor auf ClientWidth und dann F1 vertreibt die Unwissenheit. Ich finde, solche Zusammenhänge kann man gut selber herausfinden. Man muß ja nicht wegen jeder Kleinigkeit die Forenmitglieder bemühen. Ein wenig Eigeninitiative hat noch keinem geschadet

Das Thema gab's auch schon häufig, z.B.:

StringGrid - ColWidths automatisch
Form.Width stimmt nicht nach WindowsState = wsMaximized

Übrigens: Der Clientbereich ist das Rechteck, in dem der Client tätig wird. Bei einem StringGrid z.B. gehören der Rahmen und die Scrollbar nicht dazu.
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 +1. Es ist jetzt 14:35 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-2025 by Thomas Breitkreuz