Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ...SetFocus; auf deaktivem oder unsichhtbarem Fenster (https://www.delphipraxis.net/12742-setfocus%3B-auf-deaktivem-oder-unsichhtbarem-fenster.html)

Tim.exe 3. Dez 2003 13:22


...SetFocus; auf deaktivem oder unsichhtbarem Fenster
 
Hallo,

ist es irgenwie möglich über Umwege einem unsichtbaren Fenster bzw. Komponente (Memo) einen/den Focus zu verleihen?

Ich habe einen kleine Anwendung die bei Start sofort minimiert und unsichtbar wird. Das Memo kann ich im OnCreate nicht fokussieren, da ja unsichtbar...

samson 3. Dez 2003 13:48

Re: ...SetFocus; auf deaktivem oder unsichhtbarem Fenster
 
Hallo,

ich stelle mir sofort die Frage, warum möchtest Du das Memo Focusieren, wenn die Anwendung sowieso unsichtbar ist.

Hmpf...

Irgendwie unlogisch.

Gruss


Samson :?:

Tim.exe 3. Dez 2003 13:55

Re: ...SetFocus; auf deaktivem oder unsichhtbarem Fenster
 
Beim starten der Anwendung wird ein Wert in das Memo geschrieben, normalerweise könnte man ja:

Delphi-Quellcode:
...
Memo1.SelText := 'Irgendwas';
...
Aber das geht in meinem speziellen Fall nicht, das Memo muß erst fokussiert werden...

mirage228 3. Dez 2003 14:03

Re: ...SetFocus; auf deaktivem oder unsichhtbarem Fenster
 
gibts da nich die Methode CanFocus ?

mfG
mirage228

Rumpi 3. Dez 2003 14:06

Re: ...SetFocus; auf deaktivem oder unsichhtbarem Fenster
 
Solange deine Anwendung den Focus hat einfach
Delphi-Quellcode:
 Memo.SetFocus;


// sonnst musst du sie mit ForceForegroundWindow nach vorn holen

function ForceForegroundWindow(hwnd: THandle): boolean;
const
  SPI_GETFOREGROUNDLOCKTIMEOUT = $2000;
  SPI_SETFOREGROUNDLOCKTIMEOUT = $2001;
var
  ForegroundThreadID: DWORD;
  ThisThreadID : DWORD;
  timeout : DWORD;
begin
  if IsIconic(hwnd) then
    ShowWindow(hwnd, SW_RESTORE);
  if GetForegroundWindow = hwnd then
    Result := true
  else
  begin
  // Windows 98/2000 doesn't want to foreground a window when some other
  // window has keyboard focus

    if ((Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion > 4)) or
       ((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and
       ((Win32MajorVersion > 4) or ((Win32MajorVersion = 4) and
       (Win32MinorVersion > 0)))) then
    begin
      // Code from Karl E. Peterson, [url]www.mvps.org/vb/sample.htm[/url]
      // Converted to Delphi by Ray Lischner
      // Published in The Delphi Magazine 55, page 16

      Result := false;
      ForegroundThreadID :=
      GetWindowThreadProcessID(GetForegroundWindow,nil);
      ThisThreadID := GetWindowThreadPRocessId(hwnd,nil);
      if AttachThreadInput(ThisThreadID, ForegroundThreadID, true) then
      begin
        BringWindowToTop(hwnd); // IE 5.5 related hack
        SetForegroundWindow(hwnd);
        AttachThreadInput(ThisThreadID, ForegroundThreadID, false);
        Result := (GetForegroundWindow = hwnd);
      end;
      if not Result then
      begin
        // Code by Daniel P. Stasinski

        SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @timeout, 0);
        SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(0),
        SPIF_SENDCHANGE);
        BringWindowToTop(hwnd); // IE 5.5 related hack
        SetForegroundWindow(hWnd);
        SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0,
        TObject(timeout), SPIF_SENDCHANGE);
      end;
    end
    else
    begin
      BringWindowToTop(hwnd); // IE 5.5 related hack
      SetForegroundWindow(hwnd);
    end;

    Result := (GetForegroundWindow = hwnd);
  end;
end; { ForceForegroundWindow }
mfg Rumpi

Nalincah 3. Dez 2003 14:08

Re: ...SetFocus; auf deaktivem oder unsichhtbarem Fenster
 
Was genau willst du machen? Vielleicht gibt es dafür ja noch alternativen

Robert Marquardt 3. Dez 2003 15:17

Re: ...SetFocus; auf deaktivem oder unsichhtbarem Fenster
 
ActiveControl setzen

Sourcemaker 3. Dez 2003 15:25

Re: ...SetFocus; auf deaktivem oder unsichhtbarem Fenster
 
In der Tabulatorenreihenfolge als erstes hilft auch in einigen Fällen.

Gruß

Frank

samson 3. Dez 2003 15:27

Re: ...SetFocus; auf deaktivem oder unsichhtbarem Fenster
 
Hallo.

Also. Wie ich das sehe, möchtest Du an einer bestimmten Position des Memos einen Text einfügen. Klar mit Memo.SelText kannst Du an der Position des Cursors Text einfügen oder eben den Selektieren Text austauschen. Dazu muss aber das Memo selektiert sein, was in diesem Fall nicht möglich ist.

Bei mir stellt sich jetzt die Frage ob Du am Ende des Memo was einfügen möchtest oder an einer bestimmten Position.

Beim ersten Fall würde ich memo.text := memo.text +'irgendwas'; benutzen und beim zweiten würde ich den Text in einem String stecken und entsprechend Parsen.

Gruss


Samson


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:57 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