Delphi-PRAXiS
Seite 2 von 4     12 34      

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)

DeddyH 29. Okt 2010 18:15

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

Zitat von Medium (Beitrag 1058525)
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:

Die Frage habe ich mir auch schon gestellt.

Delphi-Laie 29. Okt 2010 22:33

AW: Mehrere Formulare an Stringgridgröße anpassen
 
Hallo hoika/Heiko! Wo hast Du das:

Zitat:

Zitat von hoika (Beitrag 1058440)
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!

Zitat:

Zitat von Bummi (Beitrag 1058444)
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.

Zitat:

Zitat von Bummi (Beitrag 1058444)
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.

Hansa 29. Okt 2010 22:51

AW: Mehrere Formulare an Stringgridgröße anpassen
 
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. :mrgreen:

Medium 29. Okt 2010 23:01

AW: Mehrere Formulare an Stringgridgröße anpassen
 
@Hansa: Möglich, dass das in älteren Versionen noch nicht vorhanden ist. Es tut das, was ich in einem vorigen Beitrag bereits schrieb.

Zitat:

Zitat von Delphi-Laie (Beitrag 1058572)
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...

Zitat:

Zitat von Delphi-Laie (Beitrag 1058572)
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.

Bummi 29. Okt 2010 23:52

AW: Mehrere Formulare an Stringgridgröße anpassen
 
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.

Delphi-Laie 30. Okt 2010 11:38

AW: Mehrere Formulare an Stringgridgröße anpassen
 
Die Eigenschaft "Autosize" gibt es ab Delphi 4.

Danke noch einmal für Eure Reaktionen!

Daß ich auf OOP stehe, kann ich nun beileibe nicht behaupten (sowohl mein Pseudonym als auch meine Ausführungen hier und sonstwo belegen das), aber ich werde mich noch einmal - unterstützt von Euren Hinweisen - in diese Sache hineinknien. Überhaupt, mangels echtem Interesse beschäftige ich mich im Bereich der Programmierung immer nur mit dem, was ich zur Lösung meines Problemes gerade benötige (der Weg ist für mich nicht das Ziel, sondern nur das Ziel selbst ist es).


Nochmals vielen Dank und viele Grüße!

hoika 30. Okt 2010 12:29

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

OOP.

Delphi-Quellcode:
unit FormTools;

interface

type
  TAutoSizeToolClass = class
    public
      class function AutoSizeForm(theForm: TForm; theStringGrid: TStringGrid);
  end;

Heiko

Delphi-Laie 30. Okt 2010 12:52

AW: Mehrere Formulare an Stringgridgröße anpassen
 
Hallo Hoika bzw. Heiko, danke!

Zitat:

Zitat von hoika (Beitrag 1058612)
Hallo,

OOP.

Delphi-Quellcode:
unit FormTools;

interface

type
  TAutoSizeToolClass = class
    public
      class function AutoSizeForm(theForm: TForm; theStringGrid: TStringGrid);
  end;

Heiko

Mit etwas ähnlichem versuchte ich mich auch, scheiterte aber: Ich leitete eine Formularklasse von TForm ab. Das Problem: Die Methode war nicht in der übergeordneten Klasse (TForm) sichtbar bzw. verfügbar, egal, wohin ich sie packte (Vererbung ist ja auch genaugenommen etwas, was nur die Kinder betrifft, deshalb meine Idee mit einer der TForm übergeordneten Klasse). Auch direkt in die TForm-Klasse eine Methode zu implementieren, führte mich nicht weiter.

Wird diese TAutoSizeToolClass-Klasse bzw. dessen Methode AutoSizeForm ohne Problem für die TForm-Klasse erreichbar sein? Oder gibt es da auch wieder etwas besonderes zu beachten?

Danke für die Geduld und Gruß!

Delphi-Laie

Hansa 30. Okt 2010 13:16

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

Zitat von Delphi-Laie (Beitrag 1058615)
Ich leitete eine Formularklasse von TForm ab.

...und das ist zum Scheitern verurteilt. :lol: Bzw. unnötig kompliziert. Mache eine Standardform mit dem Grid und schiebe den Krempel in die Objektablage. Da nimmst Du jetzt die Forms her und fertig (neu -> weitere). Der englische Begriff für Objektablage ist allerdings besser, als der deutsche : Form-Inheritance. Das verdeutlicht eher, um was es geht. 8-)

Bummi 30. Okt 2010 16:24

AW: Mehrere Formulare an Stringgridgröße anpassen
 
@Hansa
Ich teile Deine Meinung absolut nicht.
Jedes Projekt hat andere Anforderungen und keines meiner Projekt wird ohne Template bzw. mehre Vererbungsebenen an Templates erstellt.
Die Erstellung und Wartung der Templates ist trivial und jedes beinhaltet den für seine Ebene nötigen Maximalumfang an Funktionalität.
Auf diese Art können redundante Codeanschnitte weitestgehend vermieden werden und Funktionalitäten jederzeit nachgerüstet oder angepasst werden.
Wenn ich hierfür die Objektablage verwenden würde wäre diese 1. bis zum Platzen voll und viele Funktionen die erst in einem Projektrahmen zur Verfügung könnten gar nicht erst implementiert werden.

MfG
Thomas


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:40 Uhr.
Seite 2 von 4     12 34      

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