Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Mehrere Formulare an Stringgridgröße anpassen (https://www.delphipraxis.net/155561-mehrere-formulare-stringgridgroesse-anpassen.html)

Delphi-Laie 28. Okt 2010 18:14

Mehrere Formulare an Stringgridgröße anpassen
 
Hallo Delphifreunde!

Ein Stringgrid an ein größenveränderliches Formular, in das es eingebettet ist (align:=alClient), anzupassen, wurde schon einige Male gefragt.

Mir geht es jetzt genau im den Gegensatz, nämlich, daß das übergeordnete Formular größenbezogen so angepaßt wird, daß es das (entsprechend seiner Einträge skalierte) Stringgrid exakt aufnimmt und auf einen Blick alles anzeigt, ohne jedoch größer als nötig zu sein (ggf. die Bildschirmabmessungen als Maximum nehmen, was unschwierig ist). Dazu fand ich jedoch nichts.

Mit der Abfrage, ob die Scrollbars bzw. -balken (des Stringgrids) existieren, ist eine - etwas langsame und vom Code her weder kurze noch elegante - Bastellösung möglich, die ich mir im Verlaufe der Zeit so schlecht und recht bis zur Zufriedenheit zurechtkonstruierte. Besonders unpraktisch wird das jedoch, wenn man mehrere Formulare auf diese Weise anpassen möchte: jedesmal diese anzupassenden Codebrocken. Deshalb wollte ich das mit einer Funktion realisieren, scheiterte aber.

Weiß jemand, ob es dafür eine Komponente oder sonstwas gibt? Müßte ja eine Komponente für ein Formular mit integriertem Stringgrid sein?! Keine Ahnung, ob und wie so etwas als funktionaler Automatismus realisiert werden könnte. Mit vorsichten Vererbungsversuchen (OOP ist für mich heute leider noch ein Buch mit "nur" noch sechs Siegeln) kam ich trotz audauernder Versuche nicht weiter.

Hansa 29. Okt 2010 03:06

AW: Mehrere Formulare an Stringgridgröße anpassen
 
Du hast also irgendwelche Stringgrids mit unterschiedlicher Grösse (bzw. eher Breite) und das Formular soll sich daran anpassen oder wie ? Dann sage, ob das die Frage ist, oder präzisiere es etwas. Das wäre nämlich fast zu einfach. 8-)

Bevor ich das nicht weiss : Soll irgendwer sich damit beschäftigen, zumindest um die Zeit jetzt. :mrgreen:

Stop, noch was : um wieviele Forms geht es ?

hoika 29. Okt 2010 06:18

AW: Mehrere Formulare an Stringgridgröße anpassen
 
Hallo,
Zitat:


jedesmal diese anzupassenden Codebrocken. Deshalb wollte ich das mit einer Funktion realisieren, scheiterte aber.
hm ?

Delphi-Quellcode:
Unit FormTools;

XXX

procedure AdjustForm(theForm: TForm; theStringGrid: TStringGrid);
begin
  dein Code

Heiko

Medium 29. Okt 2010 06:43

AW: Mehrere Formulare an Stringgridgröße anpassen
 
TForm.AutoSize := true -- gibts sogar schon im OI.

Hansa 29. Okt 2010 06:58

AW: Mehrere Formulare an Stringgridgröße anpassen
 
Autosize, was nützt das ? ich sags gleich : Nix. :mrgreen:

Bummi 29. Okt 2010 07:02

AW: Mehrere Formulare an Stringgridgröße anpassen
 
Warum, sollte Autosize Dir nicht helfen??
In folgendem Beispiel gehe ich mal davon aus daß colwith und rowheigth immer gleich sind, ansonsten halt drüberlaufen und rechnen:
Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if StringGrid1.width<(StringGrid1.colcount*(StringGrid1.Defaultcolwidth + 1) + 4) then
  StringGrid1.width:=(StringGrid1.colcount*(StringGrid1.Defaultcolwidth + 1) + 4);

  if StringGrid1.Height<(StringGrid1.Rowcount*(StringGrid1.DefaultRowHeight + 1) + 4) then
  StringGrid1.Height:=(StringGrid1.Rowcount*(StringGrid1.DefaultRowHeight + 1) + 4)


end;

Hansa 29. Okt 2010 07:13

AW: Mehrere Formulare an Stringgridgröße anpassen
 
Ne, zuviele Fehler. Was soll z.B. das ColCount x 4 ? Jede Spalte ist gleich und von der Col abhängig ? :shock: Und jetzt ? Das ergibt wieder dasselbe. Das Stringrid läuft wieder etwas aus dem Ruder. Allerdings hat der Fragesteller sowieso noch keine Antwort gegeben. 8-)

Delphi-Laie 29. Okt 2010 16:25

AW: Mehrere Formulare an Stringgridgröße anpassen
 
Hallo, besten Dank für Eure Antworten!

Zitat:

Zitat von Hansa (Beitrag 1058439)
Du hast also irgendwelche Stringgrids mit unterschiedlicher Grösse (bzw. eher Breite) und das Formular soll sich daran anpassen oder wie ?

Ja, genau das meine ich.

Zitat:

Zitat von Hansa (Beitrag 1058439)
Dann sage, ob das die Frage ist, oder präzisiere es etwas. Das wäre nämlich fast zu einfach. 8-)

Dann ist mein Spürsinn, das aufzuspüren, vielleicht noch entwicklungsbedürftig. Wie gesagt, mit dem "manuellen" stufigen Zoomen (jeweils um einen Pixel) und Abfrage, ob die Scrollbalken vorhanden sind, läßt sich etwas zusammenbasteln, was aber weder performant noch elegant ist.

Zitat:

Zitat von Hansa (Beitrag 1058439)
Stop, noch was : um wieviele Forms geht es ?

Um mehrere, das schrieb ich bereits.

Inzwischen kamen ja einige Antworten, mal schauen, was ich davon am besten verarbeitet bekomme.

Wenn sich Bedarf ergäbe (was ich nicht hoffe), dann würde ich mich noch mal melden.

Nochmals besten Dank Euch allen!

Hansa 29. Okt 2010 16:46

AW: Mehrere Formulare an Stringgridgröße anpassen
 
Nun gut, da muss man mal sehen, wie so etwas geht. 8-) Bei mir liegt auf der Form zuerst mal ein Panel. Das Panel hat ein Stringgrid und das ist auf alClient gesetzt, d.h. es füllt das Panel komplett aus. Die Form wird dann je nach Panelgrösse angepasst.

Delphi-Quellcode:
procedure ErmittleGridBreite;
...
PanelBreite := 0;
for i := 0 to sg.ColCount - 1 do
  PanelBreite := PanelBreite + sg.ColWidths [i] + 1;
...
// im FormShow dann :

ErmittleGridBreite; // setzt PanelBreite
width := PanelBreite;
PanelBreite ist übrigens als Form-protected deklariert. Warum wohl ? Deshalb die Frage nach Anzahl der Forms. "mehrere" ist natürlich gute Antwort. :lol:

Medium 29. Okt 2010 17:50

AW: Mehrere Formulare an Stringgridgröße anpassen
 
Was ist hier falsch an AutoSize? :shock:
Es sorgt dafür, dass alle visuellen Komponenten auf dem Formular so eng wie es grad geht eingeschlossen werden. War nicht ganz genau DAS gefragt? :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:57 Uhr.
Seite 1 von 4  1 23     Letzte »    

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