Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi FormCreate (https://www.delphipraxis.net/167497-formcreate.html)

BLin4ik 2. Apr 2012 13:58

FormCreate
 
Hallo,

und zwar möchte ich gerne dass das AutoScroll-Property beim Form erstellen ignoriert wird, sprich er es als False erkennt.
(Im Designer ist es auf True, soll auch so bleiben)
Das Problem bei mir ist, dass ein Bildschirm mit einer anderen Auflösung(z.B. 120DPI) das Form wegen dem AutoScroll verzieht
und es wäre mühsam bei jedem Form AutoScroll auf False zu setzen, deswegen suche ich eine andere möglichkeit, dass er das Form so erstellt
als wäre AutoScroll auf False, damit auch die richtigen Height und Width Werte vom Form berechnet werden.


Habe schon sehr viel probiert(eigene Form-Klasse, AutoScroll := false...)
bin aber bis jetzt noch nicht zur einer gescheiten Lösung gekommen.

Gibt es vielleicht eine möglichkeit durch die Win API?
Ich habe micht vorhin mit SetWindowLong beschäftigt um den Stil zu verrändern, bringt aber auch rein gar nichts.

mkinzler 2. Apr 2012 14:21

AW: FormCreate
 
Überschreibe Form.Loaded(). Diese Methode wird direkt nach Laden der Eigenschaften aus der ressource aufgerufen

BLin4ik 2. Apr 2012 14:59

AW: FormCreate
 
Zitat:

Zitat von mkinzler (Beitrag 1159856)
Überschreibe Form.Loaded(). Diese Methode wird direkt nach Laden der Eigenschaften aus der ressource aufgerufen

Habe ich schon versucht, zwar ist das AutoScroll dann auf False, aber Initialisiert wurde bereits schon alles

himitsu 2. Apr 2012 15:05

AW: FormCreate
 
Im Prinzip würde man einfach den Setter von AutoScroll (SetAutoScroll) überschreiben und darin die Veränderung abfangen.

Da aber Dieser aber privat und nichtmal virtual ist, bleibt dir wohl keine andere "ordentliche" Möglichkeit, als die DFMs entsprechend abzuändern.

Kennt D5 schon TextDFMs?
Wenn ja, dann könnte man einfach über alle DFMs suchen und ersetzen lassen.

BLin4ik 2. Apr 2012 15:19

AW: FormCreate
 
Zitat:

Zitat von himitsu (Beitrag 1159861)
Im Prinzip würde man einfach den Setter von AutoScroll (SetAutoScroll) überschreiben und darin die Veränderung abfangen.

Da aber Dieser aber privat und nichtmal virtual ist, bleibt dir wohl keine andere "ordentliche" Möglichkeit, als die DFMs entsprechend abzuändern.

Kennt D5 schon TextDFMs?
Wenn ja, dann könnte man einfach über alle DFMs suchen und ersetzen lassen.

Das ist kein Problem, ich habe die Form.pas kopiert und schon versucht AutoScroll abzuändern und auch
bei SetAutoScroll zeigt es aber keine wirkung.
Ich habe es auch mal debuggt, die procedure SetAutoScroll wird nur bei AutoScroll := false abgearbeitet

himitsu 2. Apr 2012 15:33

AW: FormCreate
 
Du kannst nicht einfach VCL-Units ändern.
Denn die wird nur in den Units eingeunden, wo du sie in dein Programm reinlinkst (Uses-Klausel), aber die VCL kennt deine Unit nicht, bzw sie interessiert nicht dafür und geht immernoch auf die Original-Unit los.
Auch das Ändern einer VCL-Unit im Delphi-Verzeichnis bringt nichts, da du voher die komplette VCL (inkl. BPLs) neu kompilieren müßtest und glaub mir, das willst du nicht.
(Tipp: lösch mal die Unit im Delphiordner oder mach einen ordentlichen Fehler dort rein ... das interessiert keine Sau ... wird einfach ignoriert)

SetAutoScroll wird garantiert immer aufgerufen, egal ob AutoScroll auf True oder False gesetzt wird.
Nur ob dafür das SetAutoScroll deiner Kopie oder das der Originaldatei aufgerufen wird, ist eine andere Sache.
Der DFM-Loader ruft es nur beim True auf, da ein False nicht in der DFM drinsteht.
(
Delphi-Quellcode:
property AutoScroll ... default False;
)

Furtbichler 4. Apr 2012 06:36

AW: FormCreate
 
Du meinst, das die Scrollbars schon sichtbar sind?
Dann mach sie einfach unsichtbar.

@himitsu: Ich denke, er will die DFM nicht verändern, sondern AutoScroll zur Laufzeit ändern.

Bummi 4. Apr 2012 06:45

AW: FormCreate
 
Und wieder einmal ein Beleg dafür, dass das erste was man tun sollte, wenn man ein neues Projekt anlegt, ist ein Template für alle weiteren Forms anzulegen, auch wenn es erst mal weder Code noch Komponenten beinhaltet.

himitsu 4. Apr 2012 08:22

AW: FormCreate
 
Zitat:

Zitat von Furtbichler (Beitrag 1160082)
Ich denke, er will die DFM nicht verändern, sondern AutoScroll zur Laufzeit ändern.

Doch, gerade das will er ja eigentlich, so im Prinzip.
In seinen vielen Forms ist das auf True gesetzt und nun hat er keine Lust alle Forms/DFMs zu ändern, sondern will das erst jedesmal beim Programmstart rausgehackt bekommen.

Und bezüglich Bummis Vorschlag.
In den DFMs und PASs das TForm gegen eine eigene Formklasse ersetzen.


PS: Beides (nur DFMs oder DFMs+PASs) hätte man innerhalb der letzten 2 Tage ganz "schnell" ersetzt und währe nun fertig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 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