AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SetFocus will nicht ...

Ein Thema von TERWI · begonnen am 19. Aug 2022 · letzter Beitrag vom 21. Aug 2022
Antwort Antwort
Seite 2 von 4     12 34      
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#11

AW: SetFocus will nicht ...

  Alt 19. Aug 2022, 14:48
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#12

AW: SetFocus will nicht ...

  Alt 19. Aug 2022, 14:49
Das Fenster ohne Fokusänderung anzeigen.

Also statt Show aka ShowWindow(SW_SHOW)
ein ShowWindow(SW_SHOWNOACTIVATE).

Delphi-Quellcode:
//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
Deine LogForm hat doch Visible standardmäßig auf False?
(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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
378 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: SetFocus will nicht ...

  Alt 19. Aug 2022, 15:25
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;

Geändert von TERWI (19. Aug 2022 um 15:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.995 Beiträge
 
Delphi 12 Athens
 
#14

AW: SetFocus will nicht ...

  Alt 19. Aug 2022, 15:35
Hier funktioniert das ganz ohne Code.
  • VCL-Forms Application
  • Zweites VCL-Form dazu
  • Zweites Form im OI Visible := True
  • Zweites Form im den Projektoptionen ins Auto-Create aufnehmen

Das erste Form hat eine TEdit , das zweite ein TMemo . Wenn ich das Projekt starte, werden beide Forms angezeigt und das TEdit im ersten Form hat den Focus.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
378 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: SetFocus will nicht ...

  Alt 19. Aug 2022, 16:24
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 ....
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#16

AW: SetFocus will nicht ...

  Alt 19. Aug 2022, 16:42
Soeinen Mist wie fsStayOnTop sollte man eh dringen entsorgen.

Stattdessen benutzt man Delphi-Referenz durchsuchenPopupMode/PopupParent.

Wobei (leider) in aktuellen Delphis standardmäßig jede Delphi-Form zwanghaft an (vor) die MainForm gelegt wird.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
378 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: SetFocus will nicht ...

  Alt 19. Aug 2022, 17:10
(Richtig) lesen bildet !
Es liegt eben NICHT an fsStayOnTop !!!
Wirklich sachdienliche wären hilfreich.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#18

AW: SetFocus will nicht ...

  Alt 19. Aug 2022, 17:22
(Richtig) lesen bildet !
Freundlichkeit auch!
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.
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
378 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: SetFocus will nicht ...

  Alt 19. Aug 2022, 18:05
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:
laden wo auch immer.
... tja, was wo genau ? Link(s) ?

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'.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.332 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: SetFocus will nicht ...

  Alt 19. Aug 2022, 19:29
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz