Autor |
Beitrag |
ObscurusNox
      
Beiträge: 49
|
Verfasst: Mi 09.10.02 11:38
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
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: 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
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
Moewe2
Hält's aus hier
Beiträge: 7
|
Verfasst: 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.
_________________ Baut keine Atomraketen!
Die alten sind doch noch garnicht aufgebraucht.
|
|
O'rallY
      
Beiträge: 563
|
Verfasst: 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.
_________________ .oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
|
|
tommie-lie
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: 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...
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
Quelltext
Aber das geht wohl nicht im OnCreate-Ereignis, da zu diesem Zeitpunkt das Fenster noch nicht existiert.
|
|
tommie-lie
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: 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
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
ObscurusNox 
      
Beiträge: 49
|
Verfasst: Mi 09.10.02 17:39
Freut mich ja, dass sich soviele Leute um mein Problem bemühen
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:
Quelltext
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
      
Beiträge: 106
Win95-2003 / Debian / Suse
D1/D3/D6/D7
|
Verfasst: 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
_________________ Wenn es im Jahre 1879 schon Computer gegeben hätte, würden diese vorausgesagt haben, daß man infolge der Zunahme von Pferdewagen im Jahre 1979 im Pferdemist ersticken würde.
(John C. Edwards, brit. Zukunftsforscher)
|
|
O'rallY
      
Beiträge: 563
|
Verfasst: Mi 09.10.02 20:00
Schreib das ShowMainForm in das Create-Event, dann müsste es eigentlich klappen.
_________________ .oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
|
|
Alibi
      
Beiträge: 458
Win2K SP3
Delphi 6 Ent
|
Verfasst: 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.
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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 
      
Beiträge: 49
|
Verfasst: 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.
Zuletzt bearbeitet von ObscurusNox am So 15.12.02 20:28, insgesamt 1-mal bearbeitet
|
|
Moewe2
Hält's aus hier
Beiträge: 7
|
Verfasst: 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.
_________________ Baut keine Atomraketen!
Die alten sind doch noch garnicht aufgebraucht.
|
|