Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Form inaktiv anzeigen (https://www.delphipraxis.net/32696-form-inaktiv-anzeigen.html)

Shaman 27. Okt 2004 12:21


Form inaktiv anzeigen
 
Hallo zusammen

Wie kann ich eine Form inaktiv anzeigen lassen, also so, dass der Fokus bei dem Fenster bleibt, welches ihn schon vor dem Anzeigen meiner Form hatte. Wichtig ist, dass das letzte Fenster den Fokus gar nicht erst verliert.

Gruss
Shaman

eassy 27. Okt 2004 12:29

Re: Form inaktiv anzeigen
 
hi,

eine möglichkeit ist es, unter der methode onactivate durch
form1.setfocus (des vorigen fenster) den focus zu setzen.

gruß
eassy

Shaman 27. Okt 2004 12:43

Re: Form inaktiv anzeigen
 
Hoi

Es handelt sich um die MainForm, die den Fokus gar nicht erst erhalten darf. Wenn meine Anwendung startet, muss das vorherige Fenster aktiv bleiben.

Shaman 28. Okt 2004 15:27

Re: Form inaktiv anzeigen
 
Schwupps

Stevie 28. Okt 2004 16:44

Re: Form inaktiv anzeigen
 
Das ist relativ schwierig (hab gerade mal in der VCL rumgedebuggt... ;-)), wenn nicht gar unnöglich.
Warum ist das denn so wichtig? Wie rufst du denn dein Programm auf? Würde ja nur aus der anderen
Anwendung möglich sein, denn sonst wär der Fokus ja schon vorher weg, gell? :gruebel:

P.S.: Ich glaub, ich hab ne Idee:
Du musst die Methode CMShowingChanged überschreiben, denn dort wird die API-Funktion ShowMWindow aufgerufen und ihr anhand des WindowStates der Parameter SW_SHOWNORMAL, SW_SHOWMINNOACTIVE oder SW_SHOWMAXIMIZED übergeben. Was du aber benötigst, ist der Parameter SW_SHOWNOACTIVATE. Ich probiers mal aus...

Shaman 28. Okt 2004 17:08

Re: Form inaktiv anzeigen
 
Es geht eben um eine Art HintWindow, nur mit Controls drinnen. Nun sieht es halt einfach besser aus, wenn das Fenster seine aktive Titelleiste beibehält, wenn das HintWindow angezeigt wird.

Gruss
Shaman

Stevie 28. Okt 2004 17:13

Re: Form inaktiv anzeigen
 
Von wo aus wird denn deine HintWindow-App aufgerufen?
Kannst du das HintWindow nicht in die andere App bringen?
Du könntest doch auch im OnActivate des HintWindows den Fokus wieder zurücksetzen.

Hmm, das mit dem Überschreiben ist Käse, aber nen API-Hook auf die ShowWindow könnte gehen... mal sehen...

Shaman 28. Okt 2004 17:21

Re: Form inaktiv anzeigen
 
Ich habe eine ListBox auf einer Form, die irgendwo auf dem Desktop angezeigt werden soll, sobald man einen HotKey drückt.

Ich weiss nicht, wie ich das hinkriegen soll... Aber der Witz ist ja, in einem anderen Programm von mir ist genau dieser Effekt unerwünscht auf einmal aufgetreten, dass die MainForm beim Start inaktiv angezeigt wurde und es auch blieb, selbst wenn man sie anklickte etc. Nur konnte ich beim besten Willen nicht herausfinden woran das lag und es somit auch nicht reproduzieren... :gruebel:

Shaman 28. Okt 2004 17:30

Re: Form inaktiv anzeigen
 
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  ParentWindow:= GetForegroundWindow;
  Show;
end;
So sollte es aussehen, aber es müsste eben noch über das aktive Fenster hinaus angezeigt werden, falls dieses zu klein ist.

Stevie 28. Okt 2004 17:38

Re: Form inaktiv anzeigen
 
So, bitteschön! Form wird erst bei einem Klick aktiviert! :mrgreen:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, afxCodeHook;

type
  TForm1 = class(TForm)
    procedure FormActivate(Sender: TObject);
  end;

var
  Form1: TForm1;
  ShowWindowNextHook: function(hWnd: HWND; nCmdShow: Integer): LongBool; stdcall;

function ShowWindowHookProc(hWnd: HWND; nCmdShow: Integer): LongBool; stdcall;

implementation

{$R *.dfm}

function ShowWindowHookProc(hWnd: HWND; nCmdShow: Integer): LongBool; stdcall;
begin
  if nCmdShow = SW_SHOWNORMAL then
    Result := ShowWindowNextHook(hWnd, SW_SHOWNOACTIVATE)
  else
    Result := ShowWindowNextHook(hWnd, nCmdShow);
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
  ShowMessage('Test!');
end;

initialization
  HookCode('user32', 'ShowWindow', @ShowWindowHookProc, @ShowWindowNextHook);

finalization
  UnHookCode(@ShowWindowNextHook);

end.
Die afxCodeHook-Lib gibts hier!


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:59 Uhr.
Seite 1 von 2  1 2      

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