Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Eine Form am DBGrid an passen? (https://www.delphipraxis.net/48210-eine-form-am-dbgrid-passen.html)

smart 22. Jun 2005 07:54

Datenbank: ABS • Version: 488 • Zugriff über: Datascore

Eine Form am DBGrid an passen?
 
Das DBGrid hat ja je nachdem wie viel Felder es anzeigt, eine unterschiedliche Bereite. Gibt es eine Möglichkeit eine Form am DBGrid an zu passen? Wenn man z.B. ein DBGrid auf einer Form hat und diese Form dann aufruft, die Form gleich die passende Größe hat?

Sharky 22. Jun 2005 08:10

Re: Eine Form am DBGrid an passen?
 
Hai Heike,

Du könntest im .AfterOpen Ereigniss deines TDataSets die Größe anpassen.
Zum Beispiel:
Delphi-Quellcode:
procedure TForm1.QueryAfterOpen(DataSet: TDataSet);
var
  VScrollWidth : Integer; // Breite des Scrollbalkens
begin
  VScrollWidth := GetSystemMetrics(SM_CXVSCROLL);
  Self.Width := DBGrid1.Left + DBGrid1.Width + VscrollWidth;
end;
[Edit]ÄNDERUNG.
Ich weiss auch nicht warum ich zuerst mit .ClientWidth gearbeitet habe [edit]

Noch ein Edit:
Ich bin wohl noch nicht wach. Es wird noch immer der Horizontalescrollbaken angezeigt. :wall:
Ich überlege mir noch etwas.

smart 22. Jun 2005 08:23

Re: Eine Form am DBGrid an passen?
 
Guten Morgen!

So ähnlich hatte ich das schon versucht, klappte aber nicht, die Form war immer kleiner und hatte dann Scrolls. Sieht natürlich dann nicht so gut aus wenn DBGrid Scrolls hat und die Form auch. Hatte dann versucht das ganze über die Feldlänge zu machen, aber die Feldlänge ist nicht immer gleich die Breite vom DBGrid. DBGrid habe ich Align auf Client gestellt, ist doch richtig oder in diesen Fall nicht?

Heike.

marabu 22. Jun 2005 08:41

Re: Eine Form am DBGrid an passen?
 
Für ein primary window verbietet sich diese Vorgehensweise, aber für ein secondary window (dialog) muss nur die Eigenschaft AutoSize der Form auf true gesetzt werden. Die Regel ist: Bei sizeable windows bestimmt der Benutzer die Dimensionen, bei non sizeable windows das Programm.

Grüße vom marabu

smart 22. Jun 2005 08:55

Re: Eine Form am DBGrid an passen?
 
Zitat:

Zitat von marabu
Für ein primary window verbietet sich diese Vorgehensweise, aber für ein secondary window (dialog) muss nur die Eigenschaft AutoSize der Form auf true gesetzt werden. Die Regel ist: Bei sizeable windows bestimmt der Benutzer die Dimensionen, bei non sizeable windows das Programm.

Grüße vom marabu

Bei TDBGrid geht es aus irgend einen Grund nicht.

marabu 22. Jun 2005 09:14

Re: Eine Form am DBGrid an passen?
 
Kann nicht sein. Du hast dann weitere Komponenten auf der Form, die AutoSize unwirksam machen. Öffne in deinem Projekt eine neue Form, packe ein leeres Dbgrid drauf, mache die Form etwas zu groß und toggle AutoSize, anschließend entferne die TestForm wieder aus deinem Projekt. Damit solltest du sehen, das es geht.
Wenn du es für deinen eigenen Dialog nicht hinbekommst, dann beschreibe mal, welche Komponenten noch auf deiner Form sind, wie sie zueinander in Beziehung stehen und welche Align-Eigenschaft sie haben.

marabu

smart 22. Jun 2005 09:23

Re: Eine Form am DBGrid an passen?
 
Zitat:

Zitat von marabu
Kann nicht sein. Du hast dann weitere Komponenten auf der Form, die AutoSize unwirksam machen. Öffne in deinem Projekt eine neue Form, packe ein leeres Dbgrid drauf, mache die Form etwas zu groß und toggle AutoSize, anschließend entferne die TestForm wieder aus deinem Projekt. Damit solltest du sehen, das es geht.
Wenn du es für deinen eigenen Dialog nicht hinbekommst, dann beschreibe mal, welche Komponenten noch auf deiner Form sind, wie sie zueinander in Beziehung stehen und welche Align-Eigenschaft sie haben.

marabu

Eine leeres Dbgrid geht natürlich, klar. Der Punkt ist aber ein anderer. Wenn das Dbgrid voll ist, hat es eine unterschiedliche Breite, je nachdem wie viel Felder angezeigt werden. Ich möchte gern erreichen, das die Form sich der Breite vom Dbgrid anpasst.

Heike.

mschaefer 22. Jun 2005 10:59

Re: Eine Form am DBGrid an passen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin, moin,
and have a look.. //Grüße Martin

marabu 22. Jun 2005 11:28

Re: Eine Form am DBGrid an passen?
 
Zitat:

Zitat von smart
Eine leeres Dbgrid geht natürlich, klar.

Langsam glaube ich du hast ein ganz anderes Problem. Bei der Gestaltung der Benutzerschnittstelle besteht ein allgemeines Interesse das Grid so zu bemessen, dass weder ein weißer ungenutzter Rand, noch ein horizontaler Scrollbar erscheint. Ist es vielleicht das auf was du raus willst?

marabu

PS: Dazu wirst du aber immer noch AutoSize brauchen...

smart 22. Jun 2005 12:09

Re: Eine Form am DBGrid an passen?
 
Zitat:

Zitat von mschaefer
Moin, moin,
and have a look.. //Grüße Martin

Hallo Martin!

Ja, genau, so sollte es sein. Leider bin ich nicht selbst darauf gekommen. Hab vielen Dank für Deine Mühe.

Auch für alle anderen Antworten, vielen Dank.

Heike.

mschaefer 22. Jun 2005 12:28

Re: Eine Form am DBGrid an passen?
 
Moin, moin

Ja, aber DP-Hai hat ja seine Wellenlösung deutlich hinterlassen (!) und ich habe
einfach gehorcht wohin er schwimmen will (Delphinsonar...)

Zudem sei angemerkt, dass ich vor längerem mal eine DBGrid-Komponente
aufgebaut habe, die sich ihre Spaltenbreite anhand der Inhalte errechnet.

Grüße // Martin

smart 22. Jun 2005 12:58

Re: Eine Form am DBGrid an passen?
 
Zitat:

Zitat von mschaefer
Zudem sei angemerkt, dass ich vor längerem mal eine DBGrid-Komponente
aufgebaut habe, die sich ihre Spaltenbreite anhand der Inhalte errechnet.

Grüße // Martin

Ist die zu haben?

Sharky 22. Jun 2005 16:55

Re: Eine Form am DBGrid an passen?
 
Zitat:

Zitat von marabu
Kann nicht sein. Du hast dann weitere Komponenten auf der Form, die AutoSize unwirksam machen....

Hai marabu,

ich kann bestätigen was Heike schreibt. Mit einer Form auf der nur ein TDBGrid und die (nich visuellen) DB-Komponenten von ABS sind funktioniert dein Vorschlag nich.
Bei Verwendung der Zeos-Lib für den mySQL Zugriff ist es das selbe.

Da ich davon ausgehe das Du, bevor Du es vorgeschlagen hast, deine Idee erfolgreich eingesetzt hast wäre es super nett wenn Du einmal einenen Beispielcode anhängen könntest.

marabu 22. Jun 2005 17:50

Re: Eine Form am DBGrid an passen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hai Sharky,

Zitat:

Zitat von Sharky
wäre super nett wenn Du einmal einen Beispielcode anhängen könntest

da hängt er.

Entweder ich habe nicht verstanden was smart wirklich wollte oder du hast den gleichen Fehler wie sie gemacht. Bin auf die Auflösung des Rätsels gespannt.

Grüße vom marabu

mschaefer 22. Jun 2005 18:06

Re: Eine Form am DBGrid an passen?
 
Spätmoin,

@marabu Häng mal eine Tabelle an und lass die öffnen, dann wird es spannend...

@smart: Die Kompo wie sie aktuell ist ist so fürchterlich in meine eigene Packagesammlung
verstrickt, dass die mal nicht eben da herauszuziehen ist und die ganze Sammlung darf nicht abgeben....
Aber wenn Du einige Tage Zeit hast, werde ich die entsprechenden Routinen mal hersaussuchen..

Grüße // Martin

marabu 22. Jun 2005 18:20

Re: Eine Form am DBGrid an passen?
 
Zitat:

Zitat von mschaefer
Häng mal eine Tabelle an und lass die öffnen, dann wird es spannend...

Das Programm erzeugt und öffnet doch eine Tabelle...

smart 22. Jun 2005 19:17

Re: Eine Form am DBGrid an passen?
 
Guten Abend marabu!
Ich habe mich wahrscheinlich falsch ausgedrückt! Sorry! Ich meinte das so:
Nehmen wir mal an, Du hast eine Form und darauf ein TDBGrid. In dem TDBGrid lädst Du eine Tabelle die z.B. 4 Felder hat. Jetzt hat ja TDBGrid durch das Einladen der Felder eine neue Breite als ohne Felder (ist durch das Einladen breiter geworden). Diese neue Breite wollte ich auf die Form „Übertragen“. Mit anderen Worten, je nachdem was für eine Tabelle in TDBGrid eigeladen wird, mit 2, 4, 7 oder 9 Felder, soll die Form die Breite übernehmen, damit unten kein Scrollbalken erscheint und der Anwender immer die ganze Tabelle sehen kann. Also, genu wie das Beispiel von mschaefer.

Heike.

smart 22. Jun 2005 19:29

Re: Eine Form am DBGrid an passen?
 
Zitat:

Zitat von mschaefer
Spätmoin,

@smart: Die Kompo wie sie aktuell ist ist so fürchterlich in meine eigene Packagesammlung
verstrickt, dass die mal nicht eben da herauszuziehen ist und die ganze Sammlung darf nicht abgeben....
Aber wenn Du einige Tage Zeit hast, werde ich die entsprechenden Routinen mal hersaussuchen..

Grüße // Martin

Ja, ich kenne das von mir. Natürlich kann ich warten! Ich möchte aber keine Umstände machen!

Heike.

marabu 22. Jun 2005 19:35

Re: Eine Form am DBGrid an passen?
 
Hallo Heike,

Zitat:

Zitat von smart
Ich habe mich wahrscheinlich falsch ausgedrückt!

da bist du in diesem Forum in guter Gesellschaft. Deinen eigentlichen Wunsch hatte ich schon um 12:28 erahnt. Die Breitenanpassung des Grid-Canvas ist eine Standardtechnik um den horizontalen Rollbalken des Grids zu eliminieren. Wenn du dein breiten-optimiertes Grid dann auch noch ohne Rollbalken im Fenster oder AutoScroll im Grid sehen willst - vorausgesetzt dein Grid hat keine Überbreite - dann hilft dir AutoSize.

Freundliche Grüße vom marabu

alzaimar 22. Jun 2005 20:00

Re: Eine Form am DBGrid an passen?
 
Unabhängig davon, das es eine sportliche Herausforderung ist, soetwas mal zu programmieren, halte ich das für absoluten Blödsinn. Wenn ich das meinen Kunden zeige, sagt keiner "Cool", sondern "Machen Sie das weg, das nervt." Desweiteren ist der ganze Effekt für die Katz', wenn die Breite zu gross. Dann brauche ich doch wieder eine Scrollbar...

Ich hatte lange Zeit ein Grid, das seine Spaltenbreiten an die Grid-Breite anpasst. Ich bin davon wieder abgekommen, weil es einem auf den Sack geht.

Die Spaltenbreite den Inhalten anzupassen ist wesentlich effektiver. Damit schafft man lesbare Datengitter und erntet Zufriedenheit beim Anwender, was fast immer gleichbedeutend mit einem Folgeauftrag ist. Man kann sich auch sinnvoll mit der Erhöhung der Lesbarkeit durch alternierende Farben, angedeutete Farbverläufe und dezente Gitterformen (leichtes Grau, 3D-Effektchen) beschäftigen.

Aber, nur meine Meinung.

smart 22. Jun 2005 20:09

Re: Eine Form am DBGrid an passen?
 
Ich persönlich, finde es viel übersichtlicher wenn man die Tabelle ganz sehen kann und nicht erst noch scrollen muss. So kann man nämlich z.B. die Tabelle auch als Ein- / Ausgabe- Maske nehmen. So ähnlich ist es ja auch bei Excel.

Heike.

alzaimar 22. Jun 2005 20:43

Re: Eine Form am DBGrid an passen?
 
Das ist klar, aber dann mach doch einfach den Dialog gross genug und mache sie in der Große veränderbar (das Grid natürlich auch).
Das Demo von mschaefer ist nett, aber das rumgezappele von der Form nervt mich. Wichtig ist, das die Daten klar erkennbar sind.
Wenn nicht alle Zeilen und Spalten auf die Form passen, wirds interessant: So ein Grid besteht ja aus einem Hintergrund und den Daten selbst. Manchmal ist es besser, das beides gleichfarbig ist. Das wäre die Metapher eines Blattes Papier, in dem oben irgendwo eine kleine Tabelle hängt.
Aber manchmal will man das nicht, so, als ob die wichtige kleine Tabelle auf einem PostIt-Zettel (gelb) auf dem Papier klebt. Dann ist es wichtig, die wirkliche Größe der Tabelle zu zeigen. Dann färbe ich den Hintergrund grau (clBtnFace), die Tabelle weiss (o.ä) sodass die Daten klar erkennbar sind. Es kommt eben immer drauf an, WAS man WEM zeigen will.

Aber Jedem das Seine.

Wie eben schon erwähnt, würde ich es wesentlich prickelnder finden, wenn man sich mit dem Rendern von Tabellen beschäftigt. Eine abschließend überzeugende Lösung habe ich noch nicht gefunden.

mschaefer 22. Jun 2005 21:03

Re: Eine Form am DBGrid an passen?
 
Schon Deep Feierabendmoin,

also mal von dem kleinen Beispiel abgesehen ist es wirklich nicht so einfach festzulegen wie man mit den Tabellen umgeht.
Habe oft Auswahltabellen wo man einen Eintrag anklicken kann. In dem Fall sind die Tabellen mit leicht grauem Hintergrund
und Read-Only. Dann gibt es den Ändern Button und die Tabelle wird Hintergrund weiß und edierbar.

Das Problem der überbreiten Tabellen ist wirklich leidig. Man müßte mehrere Views festlegen können, die nur bestimmte Spalten zeigen und andere Ausblenden. Aber wie ist es mit Mehrzeiligkeit, da rätsel ich auch immer wieder. Was sich einigermaßen durchgesetzt hat ist das abwechselnd Einfärben des Spaltenhintergrundes.

Grüße // Martin

smart 23. Jun 2005 07:31

Re: Eine Form am DBGrid an passen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von alzaimar
Das ist klar, aber dann mach doch einfach den Dialog gross genug und mache sie in der Große veränderbar (das Grid natürlich auch).

Ja, da hast Du natürlich Recht und ich hätte das auch so gemacht (Wäre ja viel einfacher gewesen). Aber ich hatte eine etwas schwierigere Aufgabenstellung, nämlich ein Datenbankprogramm zu entwickeln, dass beliebig viele Tabellen mit beliebig vielen Felder zu gleichen Zeit darstellen kann. Jede Tabelle soll ein eigens Fenster haben. Die Tabellen bzw. Felder sollen noch beliebig verlinkt werden können. Da kann man ja nicht mit festen Formen arbeiten da nicht bekannt ist, wie viel Felder der Nutzer später anlegen möchte. Das ganze soll natürlich einfach zu bedienen sein (mit Oberfläche). Ich bin den Weg gegangen und erstelle alles dynamisch, auch die Größen der Fenster(Formen). Wenn der Anwender auf das entsprechende Tabellensymbol klickt, öffnet sich die Form gleich in der "richtigen" Größe, so dass man die Tabelle ganz sehen kann. Das klappt super. Welchen Weg würdest du denn da gehen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:32 Uhr.

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