![]() |
Eingabefenster automatisch anzeigen lassen
Ich habe ein Progamm. Dabei soll beim Start nach dem Aufbau des Hauptfensters automatisch ein Eingabefenster angezeigt werden.
Dies zeige ich im FormActivate des Haupfensters mittels
Delphi-Quellcode:
an. Das scheint aber nicht der richtige Aufruf zu sein, da möglicherweise das Haupfenster nicht fertig wird.
if fEntermanu.ShowModal = mrOK then begin
Jedenfalls habe ich komische Phänomene, das etwa bei Anzeige von weiteren globalen Fenstern, das Hauptfenster immer wieder im Vordergrund bleibt oder automatisch wieder aufpoppt. |
AW: Eingabefenster automatisch anzeigen lassen
Zitat:
Somit kann es sich nicht in den Vordergrund setzen. Oder erstelle einen Messageloop innerhalb des Eingabe Fenster löse diesen erst auf nachdem die Eingabe abgeschlossen ist. In dem fall wäre das Hauptfenster automatisch blockiert! EDIT: Beispiel In Show deiner Eingabe form
Delphi-Quellcode:
Wird die form geschlossen sende in Destroy, besser noch vorher in deinem Button Ereignis
var
Msg: TMsg; begin // Windows Messagen verarbeiten while GetMessage(Msg, 0, 0, 0) do begin TranslateMessage(Msg); DispatchMessage(Msg); end; end;
Delphi-Quellcode:
PostQuitMessage(0);
|
AW: Eingabefenster automatisch anzeigen lassen
Zitat:
Ich habe mich vielleicht nicht genau ausgedrückt. Das Hauptfenster sollte schon zu sehen sein und wenn das fertig aufgebaut ist, sollte das Eingabefenster aufpoppen. Das scheint ja zu gehen, aber Probleme siehe oben. |
AW: Eingabefenster automatisch anzeigen lassen
Zitat:
Versuche es einfach mal sind nur ein paar Zeilen. EDIT: Vor allem sorge dafür das deine Eingabe form nicht automatisch erstellt wird. Du mußt diese dynamisch über create in FormShow deines Hauptfensters erstellen. Du mußt dann natürlich die Eingabe Form auch wieder freigeben aber ich denke das sollte dir klar sein. |
AW: Eingabefenster automatisch anzeigen lassen
Zitat:
Zitat:
|
AW: Eingabefenster automatisch anzeigen lassen
Zitat:
Deshalb ist oder kann deine Hauptform nicht vollständig geladen sein da es automatisiert abläuft. Siehe Shot! |
AW: Eingabefenster automatisch anzeigen lassen
Danke für die Erklärung. Dann habe ich etwas fürs Wochenende zum Testen.
|
AW: Eingabefenster automatisch anzeigen lassen
Zitat:
Visible im FormDesigner: False = nicht sofort anzeigen das erste Fenster wird immer die MainForm und die wird auch immer sofort sichtbar, egal wie Visible eingestellt war und anschließend kann man mit Show+Hide oder ShowModal das Fenster anzeigen. Wenn man das Fenster aus der Liste entfernt, dann kann muß man später dieses Fenster manuell erstellen und es anzeigen (falls nicht schon Visible=True). Das "Selbsterstellen" ist aber kein Nachteil, da man so das Fenster erst erstellen kann, wenn man es wirklich braucht. Für ShowModal darf das Fenster (vorher) nicht sichtbar sein (Visible=False). |
AW: Eingabefenster automatisch anzeigen lassen
Moin...:P
Zitat:
2. OnShow ist fast das richtige Event. :P Das Problem ist, wenn du das Popup Form hier erzeugst ist das Hauptfenster noch nicht sichtbar weil durch den Dialog das OnShow nicht durchlaufen. :zwinker: Lösung: Im OnShow eine Message absetzen und eine "AfterShow" procedure erstellen und aufrufen.
Delphi-Quellcode:
const
MessageAfterShow = WM_USER + 1; ... private procedure AfterShow(Sender: TObject); procedure AfterShowMessage(var Msg: TMessage); message MessageAfterShow; ... procedure TMyForm.FormShow(Sender: TObject); begin PostMessage(Self.Handle, MessageAfterShow, 0, 0); end; ... procedure TMyForm.AfterShowMessage(var Msg: TMessage); begin AfterShow(Self); end; ... procedure TMyForm.AfterShow(Sender: TObject); begin Dialog.Execute; // sinngemäß end; |
AW: Eingabefenster automatisch anzeigen lassen
Ich öffne das erste Fenster zur Anmeldung über Applikation.OnIdle und setze es dann Applikation.OnIdle auf Nil,bevor der Dialog dann aufgerufen wird.
|
AW: Eingabefenster automatisch anzeigen lassen
Hi zusammen
Ich werfe da mal das Property ![]() In der Createprozedure eines Datenmoduls rufe ich folgende Prozedur auf:
Delphi-Quellcode:
Natürlich könnte das Popupfenster auch automatisch erzeugt werden. Aber dann existiert es auch dann, wenn es gar nicht gebraucht wird.
function TDMLSQLiteOfficerFE.DedectBiggestFreeSpace: Char;
var i :integer; PopupWindow: TPopupWindow; begin PopupWindow := TPopupWindow.Create(Self); PopupWindow.PopupMode := pmExplicit; PopupWindow.PopupParent := HomeOfficerFeMain; PopupWindow.RzPageControl1.ActivePage := PopupWindow.RzPageControl1.Pages[0]; PopUpWindow.Position := poMainFormCenter; end; Gruss Delbor |
AW: Eingabefenster automatisch anzeigen lassen
ok.. Scheint nicht erwünscht daher spare ich mir die vielen bit und bytes
|
AW: Eingabefenster automatisch anzeigen lassen
Liste der Anhänge anzeigen (Anzahl: 1)
Moin...8-)
Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
PS:
unit Unit1;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Unit2; type TForm1 = class(TForm) lblBlubb: TLabel; procedure FormShow(Sender: TObject); private public end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormShow(Sender: TObject); var Form: TForm; begin Form := Tform2.Create(nil); try Form.ShowModal; // das ist der Knackpunkt! finally Form.Free; end; end; end. Zitat:
|
AW: Eingabefenster automatisch anzeigen lassen
sorry zuviel Aufwand für nichts.
|
AW: Eingabefenster automatisch anzeigen lassen
Danke für eure Info.
Ich dachte, es gibt nur eine Lösung. Aber da habe ich mich offenbar getäuscht. Getestet habe ich erst einmal die Lösung ![]() Damit habe ich mein Problem leider nicht lösen können. Vielleicht liegt das auch an der Komponente, die ich von TMS nutze. Das eine Problem ist ja, dass sich die Fenster nicht immer die Position merken. Dazu nutzte ich ja FormSize. Ein weiteres Problem ist, dass teilweise das Hauptfenster wieder aufpoppt, obwohl ein anderes Fenster mit ShowModal angezeigt wurde. Die Probleme passieren aber nicht immer, sondern sporadisch. Deshalb dachte ich, dass es vielleicht an dem Eingabefenster liegt, wie oben beschrieben. Das sind zwar nur Schönheitsfehler. Aber die wollte ich irgendwann mal behoben haben. Vielleicht komme ich nächstes Wochenende dazu, eure anderen Lösungen einmal einzubauen. |
AW: Eingabefenster automatisch anzeigen lassen
Hmmm, ich dachte OnShow kam erst nach dem Anzeigen, aber es ist doch vorher.
Ist aber auch etwas verwirrend, da dieses Event intern CM_SHOWINGCHANGED heißt. Und es wird auch nur aufgerufen, wenn der Status über die VCL geändert wird (Visible, Show oder Hide), aber nicht wenn man es über die WinAPI daran vorbei ändert (ShowWindow mit SW_SHOWNORMAL oder SW_HIDE). Und statt einem eigenen Event (siehe "MessageAfterShow"), kann man auch ein Anderes verwenden.
Delphi-Quellcode:
procedure TMyForm.FormShow(Sender: TObject);
begin TThread.ForceQueue(nil, procedure begin //AfterShow(Self); Dialog.Execute; end); end; |
AW: Eingabefenster automatisch anzeigen lassen
Hier noch eine einfache Variante:
Delphi-Quellcode:
type
TForm1 = class(TForm) private FFirstDlg: Boolean; public procedure UpdateActions; override; end; var Form1: TForm1; implementation {$R *.dfm} { TForm1 } procedure TForm1.UpdateActions; begin if not FFirstDlg then begin FFirstDlg := True; ShowMessage('Hallo Welt'); end; inherited; end; |
AW: Eingabefenster automatisch anzeigen lassen
Zitat:
Ich empfehle einfach mal ein neues projekt zu erstellen, eine zweite form erstellen mit visible = false. OnIdle variante würde ich priorisieren. Man kann auch das zweite Formular aus der .dpr datei entfernen und über die haupt-unit dynamisch verwalten. (initialization, finalisation) |
AW: Eingabefenster automatisch anzeigen lassen
Hi zusammen
Ich erlaube mir, nochmal darauf hinzuweisen: ![]() Und zwar genau deswegen: Zitat:
Ich weiss selbst nicht, wie lange es dieses Property schon gibt, aber dass früher viel mit den (richtigen) Parametern (oder Tricks) hantiert werden musste, ist so. Und nun ist es plötzlich so einfach?? Ach so: Zitat:
Gruss Delbor |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:42 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