![]() |
Fensterwechsel unterbinden / Hintergrundproceduren
Hallo.
Ich habe folgendes Problem: Ich habe ein Formular, welches ein Editfeld mit OnChange und eine Timerfunktion besitzt. Der Timer regelt das ständige akutalisieren der Uhrzeit, das Editfeld wartet auf eine Eingabe. Wenn eine Eingabe erfolgreich verarbeitet wurde, dann wird der Fokus wieder auf dieses Editfeld gesetzt. Mein Problem ist nun, dass, wenn ich neue Childformulare öffne wegen des Timers das Parentformular immer wieder prüft ob eine Eingabe gekommen ist und folglich den Fokus auch wieder in das Editfeld setzt. Ich möchte dies unterbinden, da in dem neuen Formular auch eine Eingabe erwartet wird (Passwort). Trotzdem soll der Timer weiter laufen. Wie kann ich das in einem Formular lösen? (Timer + Fokus; Aber nur solange kein anderes geöffnet ist, bzw. es wäre gut, wenn er zwar einen Eingabe verarbeitet, aber dann sofort wieder zurück springt.) Gibt es einen Befehl, der das jüngste Fenster anzeigt o.Ä.? Muss ich den Timer ausgliedern? // Ohne Timer klappt alles wie gewohnt! Über Hilfe würde ich mich freuen. Code kann ich natürlich auch schicken, wenn gewünscht. RobSteward |
Re: Fensterwechsel unterbinden / Hintergrundproceduren
einfach in einer boolschen Variable merken, ob noch ein Formular offen ist.
D.h. beim öffnen auf True, beim Schließen auf False. Om OnTimer die einfach prüfen, wenn True dann Exit, so dass der Timer nix tut. |
Re: Fensterwechsel unterbinden / Hintergrundproceduren
Zitat:
der Timer SOLL ja was tun, er soll im alten Formular die Uhrzeit immer noch aktualisieren... das ist ja gerade mein Problem. Das mit dem Fenster könnte ich über .Showing abfragen, die gibt ne boolean zurück |
Re: Fensterwechsel unterbinden / Hintergrundproceduren
der Timer kann ja auch was tun, nur er soll bei True keinen Focus irgendwohin setzen, dann müsste das Prob doch erledigt sein ;)
|
Re: Fensterwechsel unterbinden / Hintergrundproceduren
Wie sieht es aus, wenn Du das neue Fenster mit ShowModal anzeigst?
|
Re: Fensterwechsel unterbinden / Hintergrundproceduren
Habe mich wohl falsch ausgedrückt:
Da der Timer die Zeit holt und sie in ein lable speichert, wird das formular ja immer wieder neugezeichnet und folglich wird auch immer der fokus wieder neu gesetzt. // Leider muss das Fenster normal gezeigt werden, da sonst keine EIngabe im unteren statt finden kann. |
Re: Fensterwechsel unterbinden / Hintergrundproceduren
irgendwas an deinem Code muss da schief laufen, denn durch Beschreiben eines Labels wird doch nicht das ganze Form nach vorn geholt bzw. erhält den Focus. Um das geänderte Label neu zu zeichnen (wenn es überhaupt nötig ist) reicht doch Label.Refresh, es muss doch nicht das ganze Form neu gezeichnet werden.
|
Re: Fensterwechsel unterbinden / Hintergrundproceduren
Es liegt eindeutig am Timer. Wenn ich seine Eigenschaft Activ auf False setze, habe ich zwar keine Zeit, aber dafür nicht dieses Coursersprung-Problem. Habe mal ein Stück Code angehangen, vielleicht sieht ja wer eine Lösung:
Delphi-Quellcode:
Das ist das "normale" Setzen des Fokus.
procedure Tf_hauptprogramm.FormPaint(Sender: TObject);
begin if f_admin.Showing = true then else e_benutzernummer.SetFocus; if fileexists('logo.bmp') then Image1.Picture.LoadFromFile('logo.bmp'); end;
Delphi-Quellcode:
Das ist das Ende der Anmeldeprocedure, wo der Inhalt (ne Benutzernummer) in eine MySQL-Liste eingepflegt wird.
e_benutzernummer.Text := '';
if f_admin.Showing then else e_benutzernummer.SetFocus; So hier noch der Timer:
Delphi-Quellcode:
Das war es eigentlich schon...soll ich vielleicht das SetFocus-Event nicht auf Paint sondern woanders hinsetzten?
procedure Tf_hauptprogramm.Timer1Timer(Sender: TObject);
begin zeit.Caption:= TimeToStr(GetTime); end; [edit=SirThornberry]Code-Tags durch Delphi-Tags ersetzt - Mfg, SirThornberry[/edit] |
Re: Fensterwechsel unterbinden / Hintergrundproceduren
Kann mir keiner helfen?
|
Re: Fensterwechsel unterbinden / Hintergrundproceduren
so sieht es im Moment aus. Ich für meinen Teil kann dir nicht helfen weil ich dein Problem und deine Gegebenheiten nicht verstehe. Im ersten Post schreibst du das du EIN Form hast mit EINEM Editfeld und einer Timerfunktion. In späteren Postings sind es plötzlich mehrere Forms etc.
Versuche einfach das gegebene auszuformulieren und beschreibe alles so genau das es auch jemand versteht der dein Projekt nicht kennt. Im Moment schreibst du leider so als würde jeder dein projekt schonmal gesehen haben. Anhand deiner Beschreibung würde ich denken das du 1 Editfeld hast. Darin gibst du eine Zeit ein. Und wenn du diese eingegeben hast setzt du den Focus wieder auf dieses Editfeld. Ich verstehe hier allerdings nicht warum du den Focus wieder auf das Editfeld setzt wenn es ja schon den Focus hat (schließlich hab ich gerade was rein geschrieben). Und falls es sich um ein anderes Editfeld handelt - warum musst du dort den Focus reinsetzen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:14 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