Entwickler-Ecke
Windows API - Form1 beim starten nicht anzeigen
ObscurusNox - Mi 09.10.02 11:38
Titel: Form1 beim starten nicht anzeigen
Hallo!
Hab ein Problem. Mein Programm verschwindet gleich nach dem Start in den SysTray, aber das MainForm (Form1) wird zur Zeit trotzdem noch kurz angezeigt, weil das Laden in den SysTray und das verstecken des Fensters per Timer funktioniert.
Ich will aber, dass das Form1 gar nicht erst angezeigt wird, sind zwar nur 10tel Sekunden, aber trotzdem.
Ich habe schon versucht gleich im TForm1.FormCreate ein Hide einzubauen, aber das mag Delphi anscheinend nicht, auf jeden Fall zeigt das keine Wirkung.
Habe auch schon Visible von Form1 auf false gesetzt, aber das nützt auch gar nix.
Vielleicht hat ja einer ne Idee.
Schonmal Danke ich vorraus.
Markus.
PS: Hoffe ich hab nicht schon wieder ein Posting übersehen, wo das schon behandelt wurde.
LCS - Mi 09.10.02 12:01
Hi
Primitive Methode wäre: Verschieb den Fenster so weit nach rechts, dass es ausserhalb des Bildschirms liegt.
Quelltext
1: 2: 3: 4:
| procedure TForm1.FormCreate... begin Left := Screen.Width; end; |
Gruss Lothar
Moewe2 - Mi 09.10.02 12:57
Titel: Bitte Nicht
Bitte Nicht so.
Jeder Computerbenutzer, der mehrere Monitore angeschlossen hat ist es Leid, dass viele Programmierer ihre eigentlich unsichtbaren Fenster einfach nach rehcts oder links oder sonstewohin rausgeschoben haben. Es kommt bei mir oft vor, dass auf meinem Zweitmonitor, der links neben dem richtigen steht, irgendwelche leeren Fenster erscheinen, die man dann oft sogar noch nicht einmal wegbekommt.
Also, bitte nicht.
Ich glaube es gibnt die Möglichkeit gar nicht erst ein Formular zu erstellen, aber das hab ich auch nie geschafft. Dann wäre es besser, vielleicht für die 10tel Sekunde das Fenster erscheinen zu lassen und es vielleicht auch nur 1 Pixel groß zu machne und die Buttons und die Leiste oben zu deaktiviern.
O'rallY - Mi 09.10.02 13:27
probier einfach mal den Befehl
Quelltext
1:
| Application.ShowMainForm := false; |
Muss dann natürlich beim wiederherstellen aus dem SysTray wieder rückgängig gemacht werden.
tommie-lie - Mi 09.10.02 13:55
Oder, wenn der Timer nicht allzu lang eingestellt ist, müsste es doch auch klappen, wenn man das Fenster beim Erstellen einfach minimiert. Dann erscheint es für eine kurze Zeit in der Taksleiste, aber je nachdem, wie der Timer eingestellt ist (< 1 sekunde sollten auch schon gehen) fällt das kaum auf...
Delete - Mi 09.10.02 14:02
Hört bitte mit dem Basteln aud. o'rally hat die Lösung gepostet. Und im Unit Code geht es mit
Aber das geht wohl nicht im OnCreate-Ereignis, da zu diesem Zeitpunkt das Fenster noch nicht existiert.
tommie-lie - Mi 09.10.02 14:36
Deine Antowrt habe ich auch ausprobiert, Luckie. Und ich wollte sie auch zuerst schreiben. Aber wenn ich schon im Object-Insprector meine Hauptform verstecke (mit dem Hide), dann klappt das nicht. Anscheindend kann man durch das Property seine Hauptform nicht verstecken. Oder ich habe etwas falsch gemacht (hmmm, Hide auf True, was kann man da falsch machen?)...
Tschüß
Thomas
ObscurusNox - Mi 09.10.02 17:39
Freut mich ja, dass sich soviele Leute um mein Problem bemühen :D
Aber irgendwie funktionieren eure Vorschläge nicht ganz.
Habe folgendes ausprobiert:
Quelltext
1: 2: 3: 4: 5: 6:
| begin Application.Initialize; Application.ShowMainForm := false; Application.CreateForm(TForm1, Form1); Application.Run; end. |
Hat keine Wirkung.
Und das hier auch nicht, war eigentlich auch das Problem weswegen ich den Timer eingebaut hab:
Quelltext
1: 2: 3: 4:
| procedure TForm1.FormCreate(Sender: TObject); begin Hide; end; |
Und das akzeptiert der Debugger nicht:
Fehlermeldung: [Error] Unit1.pas(392): Left side cannot be assigned to
Das mit dem nach links verschieben hab ich jetzt nicht ausprobiert, würde wohl gehen, aber soll ja nicht so schön sein.
Hm... schonmal vielen Dank für euer Bemühen, vielleicht findet ja noch einer die Lösung.
Markus.
SMI - Mi 09.10.02 18:08
Warum Benutzt du nicht einen Datenmodul anstatt einem Form? Da Datenmodule immer unsichtbar sind, fände ich die Benutzung hier irgendwie sinnvoll. Wenn du dann dein Form brauchst erstellst du es am Besten dynamisch. Damit umgehst du ein Problem von Anfang an und sparst sogar nebenbei noch Speicher.
SMI
O'rallY - Mi 09.10.02 20:00
Schreib das ShowMainForm in das Create-Event, dann müsste es eigentlich klappen.
Alibi - Mi 09.10.02 20:03
Args, einen Timer... Nenene.
Und Hide ist keine Property, sondern eine Funktion.
Mach in OnActivate oder so einfach eine einzige Zeile:
Hide;
Und fertig.
Delete - Do 10.10.02 07:34
"OnActivate" wird aber u.U. nicht nur einmal aufgerufen während das Programm läuft. Schau mal in die Hilfe zu diesem Ereignis.
Mein Vorschlag: setze die TNA-Funktionen in dein eigenes "OnMinimize"-Event (Beispiel gibt´s hier bei AUQ.de) und starte dann aber die Form gleich minimiert (einzustellen im Objektinspektor). Dadurch siehst du sie nicht. Weder auf einem Bildschirm, noch auf mehreren ...
Oder -wenn das TNA-Icon grundsätzlich immer zu sehen sein soll: dann schreib in das "OnMinimize"-Event nur den Code zum Ausblenden der Form, und starte es trotzdem minimiert. Funktioniert letzten Endes genauso.
ObscurusNox - Fr 11.10.02 12:42
@SMI: Das mit dem Datenmodul wäre wohl 'ne gute Idee, aber dazu müsste ich das ganze Programm mehr oder weniger neu schreiben. Ist mir zu kompliziert.
@O'rallY:
Quelltext
1: 2: 3: 4:
| procedure TForm1.FormCreate(Sender: TObject); begin Application.ShowMainForm := false; end; |
Das zeigt komischer weise keine Wirklung. Wenn ich das bei einem ganz neuen Project einfüge, dann geht's, bei meinem Programm irgendwie nicht.
@Moewe2:
Wäre es denn in Ordnung, wenn ich das Fenster nach unten aus dem Bildschirm schiebe?? Das ist zur Zeit meine beste Lösung und dürfte eigentlich niemanden stören, oder?
@Alibi:
Ich weiß, dass Hide eine Funktion ist, wollte nur auf den Fehler von
Luckie hinweisen.
Moewe2 - Fr 11.10.02 21:33
Es wäre möglich es außerhalb des sichtbaren Bereiches zu schieben, dann aber nicht nur ein bisschen, sondern richtig. Also zum Beispiel an Position 3000*3000 oder so. Wenn das nicht geht, mache es nach unten, ja. Die meisten Leute werden ihren Zweitmonitor links oder rechts zu stehen haben, und die paar Leute, die 4 oder 5 Monitore haben kann man nun wirklich vernachlässigen. Abe rversuchs erst mit richtig weit weg.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!