AGB  ·  Datenschutz  ·  Impressum  







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

Mehrere Formulare an Stringgridgröße anpassen

Ein Thema von Delphi-Laie · begonnen am 28. Okt 2010 · letzter Beitrag vom 2. Nov 2010
Antwort Antwort
Seite 1 von 2  1 2      
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

Mehrere Formulare an Stringgridgröße anpassen

  Alt 28. Okt 2010, 19:14
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.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

AW: Mehrere Formulare an Stringgridgröße anpassen

  Alt 29. Okt 2010, 04:06
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.

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

Stop, noch was : um wieviele Forms geht es ?
Gruß
Hansa
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Mehrere Formulare an Stringgridgröße anpassen

  Alt 29. Okt 2010, 07:18
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
Heiko
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.687 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: Mehrere Formulare an Stringgridgröße anpassen

  Alt 29. Okt 2010, 07:43
TForm.AutoSize := true -- gibts sogar schon im OI.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

AW: Mehrere Formulare an Stringgridgröße anpassen

  Alt 29. Okt 2010, 07:58
Autosize, was nützt das ? ich sags gleich : Nix.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: Mehrere Formulare an Stringgridgröße anpassen

  Alt 29. Okt 2010, 08:02
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;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#7

AW: Mehrere Formulare an Stringgridgröße anpassen

  Alt 29. Okt 2010, 23:33
Hallo hoika/Heiko! Wo hast Du das:

Delphi-Quellcode:
Unit FormTools;

XXX

procedure AdjustForm(theForm: TForm; theStringGrid: TStringGrid);
begin
  dein Code
her? In/ab welcher Delphiversion ist das zu haben?? Nicht einmal mein Turbodelphi kennt das. Das scheint aber genau das zu sein, was ich suche. Es gefiel mir von Anfang an auch am besten.

*******************

Autosize beim Forumular hilft übrigens nichts: Nicht nur, daß das Formular nicht mehr manuell zoombar ist, es ist natürlich auch nicht paßgenau, sondern zu klein: Sogar beide Scrollbalken des Stringgrids erscheinen. Keine Ahnung, was da "auto" gemacht wurde. Hineinprogrammierte Vorab-Intelligenz ist eben nicht immer so weitblickend, vorausschauend ausgelegt worden, daß sie später allen Anforderungen standhält.

******************

Hallo Bummi, auch Dir danke!

In folgendem Beispiel gehe ich mal davon aus daß colwith und rowheigth immer gleich sind, ansonsten halt drüberlaufen und rechnen:
Nein, sind sie nicht, sondern immer verschieden. Deshalb wollte ich es flexibel haben.

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;
Die Breite und Höhe eines StringGrids zu berechnen und daran - nach viel Ermitteln und Probieren - die Formulargröße pixelgenau so anzupassen, daß das Stringgrid ohne Scrollbalken auskommt, ist letztlich - ich meine das jetzt nicht abwertend - auch wieder nur eine Bastellösung (von der ich auch eine habe). Auch hier müßten jedesmal die Codezeilen erneut in den Quelltext eingefügt und wieder die Bezeichner entsprechend angepaßt werden.

Deshalb wäre eine Routine (wie hoika angedeutet) prima, aber mit OOP scheint es kaum zu funktionieren; höchstens mit einer der Formularklasse übergeordneten Klasse, in der eine solche Routine eingebaut wird, erscheint das möglich, aber daß ich so etwas hinbekomme (sofern es überhaupt möglich ist), ist nahezu ausgeschlossen.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

AW: Mehrere Formulare an Stringgridgröße anpassen

  Alt 29. Okt 2010, 23:51
Autosize gibts bei mir auch nicht. Was soll das denn nützen ? Ich erschlage die Breite des Stringgrids und die der Spalten mit einem Schlag.
Gruß
Hansa
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.687 Beiträge
 
Delphi 2007 Enterprise
 
#9

AW: Mehrere Formulare an Stringgridgröße anpassen

  Alt 30. Okt 2010, 00:01
@Hansa: Möglich, dass das in älteren Versionen noch nicht vorhanden ist. Es tut das, was ich in einem vorigen Beitrag bereits schrieb.

Hallo hoika/Heiko! Wo hast Du das:
[...]
her?
Die Zeile "dein code" hätte ein entscheidender Hinweis sein können. Hoika wollte damit wohl sagen: Bau dir einfach eine eigene Methode, die ein beliebiges Formular und Grid entgegen nimmt, womit du diese eine Funktion für alle Formulare mit Grid verwenden könntest. Sowas spezielles wirst du kaum fertig finden...

Autosize beim Forumular hilft übrigens nichts:[...]
Ich habe AutoSize auf Formularen in etlichen Projekten völlig ohne solche Probleme benutzt. Manchmal ist es eben auch die Art und Weise der Verwendung, die die Funktion stört. Zum Beispiel sollte es mehr als offensichtlich sein, dass man auf einem AutoSize-Formular keine unmittelbaren Children mit anderen Alignments als alNone, und ggf. alCustom haben sollte. Das wäre z.B. eine Stelle zum mal nachsehen - wir haben deinen Code ja nicht hier.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#10

AW: Mehrere Formulare an Stringgridgröße anpassen

  Alt 30. Okt 2010, 00:52
Zitat:
Deshalb wäre eine Routine (wie hoika angedeutet) prima, aber mit OOP scheint es kaum zu funktionieren; höchstens mit einer der Formularklasse übergeordneten Klasse, in der eine solche Routine eingebaut wird, erscheint das möglich, aber daß ich so etwas hinbekomme (sofern es überhaupt möglich ist), ist nahezu ausgeschlossen.
Wenn Du so auf OOP stehst kannst Du entweder eine Klasse von TStringgrid ableiten und hier eine Property MachMichSoGrossDassIchKeineScrollbalkenbrauchenUnd ZiehMeinenParentMit:Boolean einbauen, spätestens hier muß Du aber wieder Code schreiben die Coulmnbreiten addieren, wenn Gitterlinen siohtbar sind deren Breite mit berechnen, das selbe für die Spalen und eine geeignete Stelle finden an der die Einstellugen bei Änderugen nachgezogen werden.

Oder Du hast schon in weiser Voraussicht Deine Formularen von einer Basisklasse abgeleitet (lässt sich auch nachrüsten) in der die Routine einmalig implementiert wird z.B. eine OnPaint Routine für Stringgrids

Und hier dann:
With TStringGrid(Sender) do .....

etc.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:52 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 by Thomas Breitkreuz