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 1 von 2  1 2      
Benutzerbild von TERWI
TERWI

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

AW: SetFocus will nicht ...

  Alt 19. Aug 2022, 14:57
... wird dann wohl am Logger liegen ?!
Muss ich da unbedingt eine DLL von machen, eigenständige EXE/mit Send-/Postmessage oder geht das auch irgendwie 'einfach & schnell' ?
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#2

AW: SetFocus will nicht ...

  Alt 19. Aug 2022, 15:06
... wird dann wohl am Logger liegen ?!
Muss ich da unbedingt eine DLL von machen, eigenständige EXE/mit Send-/Postmessage oder geht das auch irgendwie 'einfach & schnell' ?
Unbedingt nicht aber du darfst gerne meine DLL verwenden.
Projekt ist nicht kompiliert!

Bsp:

laden wo auch immer.
Delphi-Quellcode:
      if not Trace_Loaded then
      begin
        Trace_Loaded := Load_TRACEDLL(ExtractFilePath(paramstr(0)) + Tracerdllfile);
        if Trace_Loaded then
        begin
          Trace('');
          repeat
            TraceHandle := FindWindow('TRACER', 'TRACER');
            WinprocessMessages;
          until TraceHandle <> 0;
        end;
      end;
Delphi-Quellcode:
procedure LOG(S1, S2: string);
var
  s: string;
begin
  if Trace_Loaded then
  begin
    if GetTraceWinHandle then
      s := '[' + FormatDateTime('hh:nn:ss:zzz', Now) + ']';
      Trace(PWideChar(s + ' MAIN: ' + S1 + S2));
  end;
end;
Delphi-Quellcode:
      Log('Load Skin: ', DefSkin);
      Log('WindowPos: ', 'Left:' + IntToStr(gP.MainLeft) + ' Top:' + IntToStr(gP.MainTop));
      Log('WindowPos: ', 'Width:' + IntToStr(gP.MainWidth) +
        ' Height:' + IntToStr(gP.MainHeight));
      Log('CreateWindow: ', 'Handle:' + IntToStr(gP.MainHandle));
Kein Kommentar daher wieder entfernt.

Geändert von venice2 (19. Aug 2022 um 16:38 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.554 Beiträge
 
Delphi 7 Professional
 
#3

AW: SetFocus will nicht ...

  Alt 19. Aug 2022, 15:14
Welches Formular ist denn beim SetFocus im Vordergrund? Der Logger?

Wenn man ein Fenster per Show anzeigt, ist das im Vordergrund und dort hat dann die "erste" Komponente den Focus (TabStop = true und TabOrder = 0).

Soll das aufrufende Fenster aber den Focus behalten, also im Vordergrund bleiben, muss man es nach dem Aufruf des zweiten Fensters, wieder in den Vordergrund bringen.

Geht eventuell sowas?
Delphi-Quellcode:
procedure TForm1.FormCreate(sender : TObject);
begin
  ...
  FormLogger.Show;
  Self.BringToFront;
  ControlFuerDieEingabeABC.SetFocus;
  ...
end;
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

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

AW: SetFocus will nicht ...

  Alt 19. Aug 2022, 15:31
Das wäre ja mal ne Idee.
Was muss ich den aus dem Proggie dem Logger (ich starte den über eine procedure) an eh schon zu übergebene Params auf der MainForm den noch geben ?
Hab das bisher noch nie gemacht und im Moment eher keinen Plan. (ControlFuerDieEingabeABC)

ADD:
OOPS - da kam zwischendurch noch was.
Das muss ich erst mal verarbeiten ....

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

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

AW: SetFocus will nicht ...

  Alt 19. Aug 2022, 15:38
@Delphi.Narium
Das hatte ich hier schon rauf und runter probiert.
Die MainForm und der OnKey... Event funzt erst, wenn ich in die Form klicke.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.554 Beiträge
 
Delphi 7 Professional
 
#6

AW: SetFocus will nicht ...

  Alt 19. Aug 2022, 15: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
44.316 Beiträge
 
Delphi 12 Athens
 
#7

AW: SetFocus will nicht ...

  Alt 19. Aug 2022, 15: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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

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

AW: SetFocus will nicht ...

  Alt 19. Aug 2022, 16: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 16:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: SetFocus will nicht ...

  Alt 19. Aug 2022, 16: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
381 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: SetFocus will nicht ...

  Alt 19. Aug 2022, 17: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
Antwort Antwort
Seite 1 von 2  1 2      


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 06:21 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