Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi wieso hat jede anwendung in delphi zwei handles? (https://www.delphipraxis.net/81037-wieso-hat-jede-anwendung-delphi-zwei-handles.html)

Timi-loader 19. Nov 2006 14:04


wieso hat jede anwendung in delphi zwei handles?
 
hallo
also mich wunderte jetzt, als ich ein programm geschrieben habe, welches alle handles auflistet, dass jedes von mir mit delphi geschriebene programm immer 2 handles hat. zum einen TApplication und zum andern beim Standard TForm1.
dieses TForm1 kann ich ja im prinzip umbenennen, indem ich einfach den namen des Form1 änder.

aber wie änder ich den den namen von TApplication? (sonst sieht ja jeder gleich: "ah mit delphi erstellt")

und wieso hat jede anwendung von delphi bei mir immer zwei handles?? (jede andere anwensung macht doch auch nur eins oder)

mfg
:)
Timi-loader

Waldteufel 19. Nov 2006 14:10

Re: wieso hat jede anwendung in delphi zwei handles?
 
Hi Timi-loader.

Zitat:

Zitat von Timi-loader
also mich wunderte jetzt, als ich ein programm geschrieben habe, welches alle handles auflistet, dass jedes von mir mit delphi geschriebene programm immer 2 handles hat. zum einen TApplication und zum andern beim Standard TForm1.

Die beiden Handles sind einfach einmal das Handle zur Anwendung (engl: application), sowie das Handle zum Formular (engl: form).

Zitat:

Zitat von Timi-loader
dieses TForm1 kann ich ja im prinzip umbenennen, indem ich einfach den namen des Form1 änder.

Genau. Streng genommen änderst du damit den Namen der Formularklasse TForm1 in irgendwas anderes.

Zitat:

Zitat von Timi-loader
aber wie änder ich den den namen von TApplication?

Gar nicht. Die Klasse heißt TApplication und das bleibt so. Vom Rumpfuschen an der VCL und ihrem Drum-und-Dran kann ich nur abraten.

Zitat:

Zitat von Timi-loader
sonst sieht ja jeder gleich: "ah mit delphi erstellt"

Ist das denn so schlimm? Es ist ja keine Schande, mit Delphi zu programmieren.

Gruß,
Waldteufel

mkinzler 19. Nov 2006 14:11

Re: wieso hat jede anwendung in delphi zwei handles?
 
Für die Kommunikation mit dem Betriebssystem verwendet Delphi ein nicht sichtbares Fenster. Dieses wird durch das Applikationsobjekt erzeugt. Du müßtest also diese Überschreiben umd den handle zu ändern.

SirThornberry 19. Nov 2006 14:49

Re: wieso hat jede anwendung in delphi zwei handles?
 
Wenn dir das TApplication nicht gefällt dann programmiere einfach NonVCL dann sind deine Anwendungen schön klein und du kannst dich um alles selbst kümmern (also auch die Klassennamen)

Phoenix 19. Nov 2006 14:57

Re: wieso hat jede anwendung in delphi zwei handles?
 
Alternativ kann er auch TApplication ableiten (und nix verändern) und verwenden - dann ist das Handle halt eins auf SeinEigenerKlassenname.

SirThornberry 19. Nov 2006 14:58

Re: wieso hat jede anwendung in delphi zwei handles?
 
dann hat er aber das Problem das er die VCL ändern muss oder die unit Forms nicht verwenden sollte damit keine Instanz von TApplication erzeugt wird.

Phoenix 19. Nov 2006 15:05

Re: wieso hat jede anwendung in delphi zwei handles?
 
Soweit ich weiss geht das mit einem kleinen Getrickse. Man muss nur vor dem EInbinden der Unit Forms in der Projektcode-Datei eine eigene Unit einbinden die im initialization die abgeleitet Application-Klasse erzeugt und der globalen Variable Application zuweist. Dann wird TApplication nämlich soweit ich weiss nicht nochmal erzeugt.

Ist aber schon länger her das ich mit sowas gerabeitet hab, das kann also auch schon deprecated sein. Zumal ging das mit Delphi 5.

jbg 19. Nov 2006 15:33

Re: wieso hat jede anwendung in delphi zwei handles?
 
Zitat:

Zitat von Phoenix
Soweit ich weiss geht das mit einem kleinen Getrickse. Man muss nur vor dem EInbinden der Unit Forms in der Projektcode-Datei eine eigene Unit einbinden die im initialization die abgeleitet Application-Klasse erzeugt und der globalen Variable Application zuweist.

Du hast dabei aber wohl vergessen, dass du Forms dann in dieser neuen Unit einbinden musst, um auf die Application-Variable zugreifen zukönnen, womit aber der initialization Abschnitt von Forms bzw. Controls bereits ausgeführt vor dem neuen ausgeführt wird, und somit Application bereits erzeugt ist.
Ohne VCL Code Änderung oder API Hooks wird das so nicht gehen.

Phoenix 19. Nov 2006 15:45

Re: wieso hat jede anwendung in delphi zwei handles?
 
Eben nicht. Das war irgendwie der Trick an der Geschichte. Die Variable wurde vorbelegt und erst in einer später aufgeführten Unit wurde Forms includiert, so dass TApplication nicht nochmal neu erzeugt wurde. Aber das ist inzwischen knapp 6 Jahre her, ich hab echt keine Details mehr im Kopf. Muss mal gucken ob ich die alten Sourcen noch Zuhause in einem meiner zahlreichen Archive hab.

Auf jeden Fall ging das, ohne die VCL auch nur schräg anzugucken geschweige denn anzufassen.

Elvis 19. Nov 2006 17:17

Re: wieso hat jede anwendung in delphi zwei handles?
 
Ich dachte eben, so naiv wie ich nun mal bin, dass die Borländer einfach den ClassName der Application-Instanz als ClassName für das Fenster nehmen.
Demnach hätte das hier schon gereicht:
Delphi-Quellcode:
type
  MyApplication = class(TApplication);
  PClass       = ^TClass;
begin
  PClass(Application)^ := MyApplication;

  Application.Initialize;
  ...
Als es nicht klappte, schaute ich in die dunklen Abgründe der Forms.pas (*uärks*... :? ) und musste feststellen, dass sie dort tatsächlich ein Stringliteral benutzen. :wall:
Es gibt also keinen hübschen, delphischen Weg. Du müsstest schon den Klassennamen über die Windows API ändern (kA wie/ob das geht), oder einfach damit leben.
Ich wüsste nicht was schlimm daran sein könnte. Delphi ist ja nicht peinlich, wie dieses komische Viech namens VB. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:55 Uhr.
Seite 1 von 2  1 2      

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