![]() |
procedure nach Application.run
So nun hab ich mal ne Frage, ob das richtig ist, was ich hier gemacht habe...
Ich will in Abhängigkeit von den Übergabeparametern eine anderes Formular als das Hauptformular Anzeigen lassen und hab das jetzt so gelöst.
Delphi-Quellcode:
Gibt es da noch eine einfachere Lösung? Gibt es eine Procedure, die auf jeden Fall nach Application.run ausgeführt wird?
//dpr
Application.Initialize; Application.CreateForm(THauptform, Hauptform); if (AnsiStrLiComp(PChar(ParamStr(1)),'open',4)=0) then Application.ShowMainForm := false; //Hauptformular nicht anzeigen PostMessage(Hauptform.Handle, $0433, 0, 0); //Benutzerdefinierte Message an Hauptformular senden Application.Run; //Hauptform procedure THauptform.WndProc(var Msg: TMessage); begin case Msg.Msg of $0433: begin //soll auf jeden Fall nach Application.Run laufen NebenForm:= TNebenForm.Create(Self); NebenForm.NachFormCreate(Self); NebenForm.ShowModal; end; end; inherited; end; Gruß BBB |
Re: procedure nach Application.run
Hallo,
ob's so geht weiß ich nicht, versuche es bitte einmal in dieser Art:
Delphi-Quellcode:
//dpr
Application.Initialize; Application.CreateForm(THauptform, Hauptform); if (AnsiStrLiComp(PChar(ParamStr(1)),'open',4)=0) then begin Application.ShowMainForm := false; //Hauptformular nicht anzeigen Hauptform.NebenformShow; end; Application.Run; //Hauptform procedure THauptform.NebenformShow; begin Hide; NebenForm:= TNebenForm.Create(Self); NebenForm.NachFormCreate(Self); NebenForm.ShowModal; end; |
Re: procedure nach Application.run
Das hatte ich auch schon überlegt, aber dann wird das Formshow ja vor Application.run ausgeführt und das wollte ich möglichst vermeiden ( da würde ja mein ganzes Programm vor Application.run laufen).
|
Re: procedure nach Application.run
Application.Run ist ja die Hauptprogrammschleife, danach ist erst beim Beenden des Programmes
|
Re: procedure nach Application.run
Hallo,
dachte bisher immer, das Application.Run erst das Programm "zum Laufen" bringt. Eventuell setzt Du für's Hauptform im Objectinspektor Visible auf False und passt den Quelltext noch ein bisserl an:
Delphi-Quellcode:
In dieser Form mache ich es immer bei solchen Programmen, die einerseits als "bedienbare" Programme mit Oberfläche laufen sollen, aber, wenn sie mit Paramter aufgerufen werden, sich wie Batchprogramme verhalten sollen. Bei diesen "Psuedobatchprogrammen" sorge ich dann dafür, dass Application.Run nicht aufgerufen wird, sondern irgendeine andere Methode im Hauptformular, die die entsprechende Logik enthält. D. H.: Das Application.Run befindet sich im Else-Zweig der If-Abfrage.
if (AnsiStrLiComp(PChar(ParamStr(1)),'open',4)=0) then begin
Application.ShowMainForm := false; // Hauptformular nicht anzeigen Hauptform.NebenformShow; end else begin Application.ShowMainForm := True; // Hauptformular anzeigen end; |
Re: procedure nach Application.run
Und Application.run soll in meinem Fall immer ausgeführt werden. Nur hab ich leider keine Procedure gefunden, die bei Application.run ausgeführt wird, wenn Application.ShowMainForm false ist.
|
Re: procedure nach Application.run
Hallo,
Zitat:
Meiner Meinung nach musst Du vor dem Application.Run "nur" sicherstellen, dass das von Dir gewünschte Formular angezeigt wird. Okay, habe mal ein bisserl rumgedaddelt, mit den bisherigen Vorschlägen ist Dein Wunsch nicht umzusetzen, deshalb mal folgender Ansatz: dpr
Delphi-Quellcode:
Hauptformular
program Project1;
uses Forms, Unit1 in 'Unit1.pas' {Hauptformular}, Unit2 in 'Unit2.pas' {Nebenformular}; {$R *.res} begin Application.Initialize; Application.CreateForm(THauptformular, Hauptformular); Application.CreateForm(TNebenformular, Nebenformular); If ParamStr(1) = 'open' then begin Application.MainForm.WindowState := wsMinimized; NebenFormular.ShowModal; end; Application.Run; end.
Delphi-Quellcode:
Nebenformular
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type THauptformular = class(TForm) procedure FormActivate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Hauptformular: THauptformular; implementation {$R *.dfm} procedure THauptformular.FormActivate(Sender: TObject); begin If ParamStr(1) = 'open' then begin Hauptformular.WindowState := wsMinimized; end; end; end.
Delphi-Quellcode:
Eventuell hilft das ja weiter.
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TNebenformular = class(TForm) procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private-Deklarationen } public { Public-Deklarationen } end; var Nebenformular: TNebenformular; implementation {$R *.dfm} procedure TNebenformular.FormClose(Sender: TObject; var Action: TCloseAction); begin If ParamStr(1) = 'open' then begin Close; Application.MainForm.Close; end; end; end. |
Re: procedure nach Application.run
Das MainForm ist immer das, was als erstes erzeugt wird (genauer: mit Application als Owner erzeugt wird). Ich löse das immer folgendermaßen:
In der DPR werden gar keine Formulare erzeugt, sondern lediglich ein Datenmodul. Dieses Datenmodul erzeugt dann im OnCreate die benötigten Formulare je nach Gusto. Theoretisch kann man diese Mimik eigentlich auch in der DPR unterbringen, allerdings haut einem die IDE mit ihren Automatismen häufig alles kaputt. |
Re: procedure nach Application.run
Bei den Posts hier wird ja Apllication.run nicht ausgeführt, wenn Application.ShowMainForm auf false steht.
Habe noch weiter rumgesucht. Zumindest eine nachfolgende Funktion hab ich nicht gefunden. Wie es aussieht bleiben 4 Möglichkeiten in Application.run weiterzumachen: 1-Windows-Botschaft 2-neuer Thread 3-Timer 4-Application.onidle Wirklich gefallen tut mir keinee der Alternativen, aber ich muss mich wohl für eine entscheiden... |
Re: procedure nach Application.run
Es kommt drauf an, was du willst ... hab das irgendwie nicht so richtig verstanden.
Du kannst z.B. auch das Nebenformular zum Hauptformular machen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:57 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-2025 by Thomas Breitkreuz