AGB  ·  Datenschutz  ·  Impressum  







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

procedure nach Application.run

Ein Thema von Bomberbb · begonnen am 17. Sep 2009 · letzter Beitrag vom 17. Sep 2009
Antwort Antwort
Seite 1 von 2  1 2      
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#1

procedure nach Application.run

  Alt 17. Sep 2009, 11:53
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:
//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;
Gibt es da noch eine einfachere Lösung? Gibt es eine Procedure, die auf jeden Fall nach Application.run ausgeführt wird?

Gruß

BBB
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

Re: procedure nach Application.run

  Alt 17. Sep 2009, 12:06
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;
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#3

Re: procedure nach Application.run

  Alt 17. Sep 2009, 12:11
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).
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: procedure nach Application.run

  Alt 17. Sep 2009, 12:15
Application.Run ist ja die Hauptprogrammschleife, danach ist erst beim Beenden des Programmes
Markus Kinzler
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

Re: procedure nach Application.run

  Alt 17. Sep 2009, 12:23
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:
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;
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.
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#6

Re: procedure nach Application.run

  Alt 17. Sep 2009, 13:11
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.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#7

Re: procedure nach Application.run

  Alt 17. Sep 2009, 13:26
Hallo,
Zitat von Bomberbb:
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.
wüsste nicht, das es die gibt.

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:
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) = 'openthen begin
    Application.MainForm.WindowState := wsMinimized;
    NebenFormular.ShowModal;
  end;
  Application.Run;
end.
Hauptformular
Delphi-Quellcode:
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) = 'openthen begin
    Hauptformular.WindowState := wsMinimized;
  end;
end;

end.
Nebenformular
Delphi-Quellcode:
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) = 'openthen begin
    Close;
    Application.MainForm.Close;
  end;
end;

end.
Eventuell hilft das ja weiter.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.477 Beiträge
 
Delphi 12 Athens
 
#8

Re: procedure nach Application.run

  Alt 17. Sep 2009, 13:43
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.
Uwe Raabe
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#9

Re: procedure nach Application.run

  Alt 17. Sep 2009, 14:54
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...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#10

Re: procedure nach Application.run

  Alt 17. Sep 2009, 15:00
Es kommt drauf an, was du willst ... hab das irgendwie nicht so richtig verstanden.

Du kannst z.B. auch das Nebenformular zum Hauptformular machen.
$2B or not $2B
  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 19:28 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