AGB  ·  Datenschutz  ·  Impressum  







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

Taskbareintrag bei neuem Form aus Objekt

Ein Thema von kaiser1401 · begonnen am 22. Nov 2010 · letzter Beitrag vom 23. Nov 2010
Antwort Antwort
kaiser1401

Registriert seit: 6. Mär 2006
Ort: Gescher
157 Beiträge
 
Delphi 7 Professional
 
#1

Taskbareintrag bei neuem Form aus Objekt

  Alt 22. Nov 2010, 17:08
Hallo,

mal wieder eine Taskbar-Frage da ich leider nichts passendes finde

Ich habe ein Objekt das über eine Methode ein Formular erstellt und dieses Modal anzeigt.

Dieses Formular soll das einzige Formular der Anwendung sein, wenn möglich also das MainForm. Nach dem Schließen des Formulars soll die Anwendung sich schließen.

Der Programmablauf ist also in etwa

Objekt erzeugen
mit dem Objekt was machen
irgendwann das Formular des Objektes modal anzeigen
Programm beenden

Dafür habe ich zunächst den ganzen Application.Inizialize/Run... Kram etc aus der Hauptunit entfernt und arbeite dort lediglich mit meinem Objekt. Mein Problem ist nur, dass wenn ich das Formular minimiere es nicht auf der Taskbar liegt, sondern darüber. Einen Taskbareintrag gibt es allerdings durchgehend auch.

Nächste Idee war Ein Dummy Formular als Mainform zu erzeugen und mein Objekt im OnCreate des Dummys zu erzeugen:
Delphi-Quellcode:
  Application.Initialize;
  Application.Title := 'Meine App';
  Application.CreateForm(TAppMainForm, AppMainForm);
  Application.ShowMainForm:=false;
  Application.Run;

//----------------

  procedure TAppMainForm.FormCreate(Sender: TObject);
   var MyObject:TMyObject;
begin
  [..]
  MyObject.ShowForm; // Modales anzeigen intern
  freeandnil(MyObject);
  PostMessage(self.Handle,WM_CLOSE, 0, 0); // Programm beenden
end;
Funktioniert auch, hat aber den selben Effekt, dass das spätere Formular nicht in der Taskbar liegt. Oder wenn ich mit SetWindowLong(fWindow.Handle, GWL_EXSTYLE, WS_EX_APPWINDOW); arbeite eben 2 Einträge habe...

Hat irgendjemand von euch eine Idee wie ich es hin bekomme, dass das Formular des Objektes sich so verhält wie ein Mainform, also sich in die Taskbar minimiert und es nur einen einzigen Taskbareintrag gibt?

(Borderstyle des Formulars ist bsSizeable, Formstyle ist fsNormal)
inc(i);
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

AW: Taskbareintrag bei neuem Form aus Objekt

  Alt 22. Nov 2010, 17:30
Der Programmablauf ist also in etwa
Objekt erzeugen
mit dem Objekt was machen
irgendwann das Formular des Objektes modal anzeigen
Programm beenden
Also ich würde den Ablauf ändern und so allen Problemen aus dem Weg gehen.
1.) Hauptformular erzeugen (lassen)
2.) in OnCreate das Objekt erzeugen
3.) in OnShow beginnt das Objekt mit seiner (Vor-)Arbeit
4.) jetzt wird das Hauptformular sichtbar
5.) bestimmte Daten aus dem Objekt anzeigen
6.) Der Benutzer darf jetzt "Abbrechen" drücken; dann beendet sich das Programm
Oder er füllt die Felder des Formulars aus und drückt "OK"
7.) Falls "OK" gedrückt wurde, werden die Formulardaten an das Objekt gegeben, verarbeitet und anschliesend wird das Hauptformular mit Close geschlossen
Andreas
  Mit Zitat antworten Zitat
kaiser1401

Registriert seit: 6. Mär 2006
Ort: Gescher
157 Beiträge
 
Delphi 7 Professional
 
#3

AW: Taskbareintrag bei neuem Form aus Objekt

  Alt 22. Nov 2010, 17:42
Habe ich dann nicht zwei Formulare? Also das Hauptformular der Anwendung und das aus dem Objekt?

Das angezeigte Formular ist weniger zur Eingabe gedacht denn zur Ausgabe. Es zeigt eine Art Suchergebnis an das auf Parametern beruht die zuvor mit an die Anwendung übergeben wurden. Und das anzuzeigende Formular ist das einzige was ich brauche und sollte auch das einzige sein.
inc(i);
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

AW: Taskbareintrag bei neuem Form aus Objekt

  Alt 22. Nov 2010, 20:07
Also deine Beschreibung ist doch recht vage und unklar.
Du versuchst krampfhaft das Hauptformular zu verstecken (Application.ShowMainForm:=false) und redest von einem modalen Formular.
Modale Formulare werden dazu benützt den Programmfluss anzuhalten und vom Benutzer eine Eingabe anzufordern.
Aber anscheinend soll der Benutzer überhaupt nichts eingeben, oder?

Dann verstehe ich nicht, warum du nicht geraderaus das Hauptformular verwendest.
1.) Programm wird gestartet
2.) Hauptformular wird erzeugt (und zwar automatisch über die Projektdatei)
3.) das Suchergebnis wird auf dem Hauptformular angezeigt
dazu kann man das Event OnCreate oder OnShow verwenden
4.) Wenn der Benutzer auf das X zum Schliesen klickt oder ALT-F4 tippt wird das Programm beendet. (auch das passiert automatisch)

Ein Screenshot (als GIF oder PNG) wäre auch hilfreich.
Andreas
  Mit Zitat antworten Zitat
kaiser1401

Registriert seit: 6. Mär 2006
Ort: Gescher
157 Beiträge
 
Delphi 7 Professional
 
#5

AW: Taskbareintrag bei neuem Form aus Objekt

  Alt 23. Nov 2010, 08:40
Das mit dem krampfhaft stimmt schon ziemlich..

Das Objekt wurde ursprünglich mal als COM Objekt bereit gestellt um aus einer anderen Anwendung heraus aufgerufen zu werden. Es gab aber Speicher- und Zugriffsprobleme beim Aufruf aus Lotus Notes heraus weshalb das Objekt nun ohne COM in einer eigenständigen Anwendung mit Parametern gestartet wird und das Formular zur Ausgabe angezeigt wird. Das funktioniert ja auch alles wunderbar, bis auf das minimieren in die Taskleiste, so das es nur einen Taskbareintrag gibt. Ich will eigentlich ungern alles wieder umstricken (in dem Objekt und dem Formular) nur für dieses minimieren.
inc(i);
  Mit Zitat antworten Zitat
Benutzerbild von rapante
rapante

Registriert seit: 3. Jun 2009
Ort: OPR
172 Beiträge
 
Delphi 12 Athens
 
#6

AW: Taskbareintrag bei neuem Form aus Objekt

  Alt 23. Nov 2010, 09:22
Hy Kaiser,

hier werden 2 Möglichkeiten angeführt um einer Form einen eigenen Taskbareintrag hinzuzufügen.

Den Taskbareintrag der Application verstecken:
Delphi-Quellcode:
procedure TMainForm.FormShow(Sender: TObject);
var Owner : HWnd;
begin
  Owner:=GetWindow(Handle,GW_OWNER);
  ShowWindow(Owner,SW_HIDE);
end;
Micha
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:41 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