![]() |
AW: SetFocus will nicht ...
Zeig' doch einfach mal Deinen nicht funktionierenden Quelltext.
Dann haben wir eine Chance einen eventuell enthaltenen Fehler zu finden oder einen Verbesserungsvorschlag zu machen. Die MainForm muss hinter dem Show für den Logger wieder in den Vordergrund gebracht werden und zwar in der Routine, die das Show für den Logger enthält, nicht in irgendem Event. |
AW: SetFocus will nicht ...
Das Fenster ohne Fokusänderung anzeigen.
Also statt Show aka ShowWindow(SW_SHOW) ein ShowWindow(SW_SHOWNOACTIVATE).
Delphi-Quellcode:
Deine LogForm hat doch Visible standardmäßig auf False?
//FormLogger := TFormLogger.Create(Application); // oder Application.MainForm oder sonstwas
ShowWindow(FormLogger.Handle, SW_SHOWNOACTIVATE); FormLogger.Visible := True; // das Visible der VCL noch umstellen ... nicht nur im internen WinControl (vor vielen vielen Jahren waren Forms gern Visible=True ... inzwischen sind sie Visible=False und werden dann erst sichtbar gemacht) Alternativ auch noch bei den Controls (Memo) das TabStop auf False setzen. |
AW: SetFocus will nicht ...
Der Logger hat schon immer Visible := false gehabt.
Wenn ich die Initialiserung des Loggers weglasse, geht auch alles wie gewünscht. ... also eher nur ein Problem bei 'visuellen OnlineDegugger'. TabStop := false beim Memo des Loggers bringt auch nix: Eine Tastatur eingabe wird nur mehr nicht angezeigt - in der MainForm kommt immer noch nix an. Wie/wo wäre im Logger bei erzeugter Form SW_SHOWNOACTIVATE anzuwenden ? Überhaupt notwendig wenn visible = false ? Für Uwe: Ich initialisiere mein ges. Projekt in der MainForm so:
Delphi-Quellcode:
procedure TZatMAIN.FormActivate(Sender: TObject);
begin if FIsInit then exit; // avoid furthermore callings ti initialize Logger.SetMode(FDoLogWin, FDoLogFile); // Show Window ? / Write LogFile ? Log('ACTIVATE', 'ForeGround: ' + booltostr(SetForegroundWindow(handle), true)); // da kommt immer false... Self.BringToFront; Videopanel.SetFocus; // bringt beides nichts ... // .... weitere Init's FIsInit := true; end; |
AW: SetFocus will nicht ...
Hier funktioniert das ganz ohne Code.
Das erste Form hat eine
Delphi-Quellcode:
, das zweite ein
TEdit
Delphi-Quellcode:
. Wenn ich das Projekt starte, werden beide Forms angezeigt und das
TMemo
Delphi-Quellcode:
im ersten Form hat den Focus.
TEdit
|
AW: SetFocus will nicht ...
Kurios.
Der Logger ist eigentlich eine ganz normale unit - keine Klasse. Die Unit wir automatisch via 'initialization' LOGGER := TLOG.Create(); erzeugt (dann ist die var LOGGER immer da) und via 'finalization' FreeAndNil(LOGGER); freigegeben. Create erzeugt einen Thread mit FLogThread.FreeOnTerminate := true; Die Form wird die erst auf Anfrage via SetMode erzeugt. Dito falls ein Logfile gewünscht ist. Bisher war das LogWin immer fsStayOnTop, damit ich das immer oben habe. Änderung zu fsNormal brachte keine Änderung. Wenn das Log-Fenster startet nach SetMode ist der Tastaturfocus immer dort im Memo. Wenn kein Log-Fenster erzeugt wird, ist alles schön .... Verstehe ich nicht. Was wäre mit dem Versuch, der SetMode-Procedure das Handel der Mainform mitzugeben, damit der Logger das Fenster nach vorne holt ? (wurde so vorgeschlagen ?!) Was wäre da zu übergeben und im Logger aufzurufen ? Ich hab keinen Plan .... |
AW: SetFocus will nicht ...
Soeinen Mist wie fsStayOnTop sollte man eh dringen entsorgen.
Stattdessen benutzt man ![]() Wobei (leider) in aktuellen Delphis standardmäßig jede Delphi-Form zwanghaft an (vor) die MainForm gelegt wird. |
AW: SetFocus will nicht ...
(Richtig) lesen bildet !
Es liegt eben NICHT an fsStayOnTop !!! Wirklich sachdienliche wären hilfreich. |
AW: SetFocus will nicht ...
Zitat:
Hättest du meine DLL getestet wäre dein Problem längst erledigt. Aber da kein Kommentar dazu kam habe ich es wieder entfernt. Jeder wie er will. |
AW: SetFocus will nicht ...
Sorry vielmals, wenn das irgendwie in den falschen Hals gekommen ist.
War definitiv nicht böse oder sonst wie persönlich oder abwertend gemeint ! Nur: Deine Code-Schnipsel haben nicht wirklich weitergeholfen Und: Zitat:
Wenn man helfen möchte, sehe ich das grundsätzlich als absolut positiv an. Aber wenn der zu Helfende im Nirwana selbst recherchieren soll (was [hoffentlich !] die meisten vorher machen), dann ... eher 'nicht so positiv'. |
AW: SetFocus will nicht ...
Es ist keine gute Idee so viel im OnActivate zu machen, schon gar nicht Änderungen am Fokus. Denn das OnActivate passiert ja gerade erst beim Anzeigen des Fensters. Du könntest dir z.B. selbst mit PostMessage eine Nachricht an dein Fenster schicken, die dann erst hinterher abgearbeitet wird, und dort diese Aktionen ausführen.
Aber auch ich kann das Problem nicht nachvollziehen. Ohne Beispielprojekt sehe ich nicht, wie ich hier zielgerichtet helfen könnte. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:57 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 by Thomas Breitkreuz