Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi ext. Programmstart + maximieren (https://www.delphipraxis.net/98270-ext-programmstart-maximieren.html)

bluescreen25 24. Aug 2007 08:20


ext. Programmstart + maximieren
 
ich habe ein kleines Problem mit dem Maximieren eines aus der Anwendung gestarteten Programmes.
der Reihenfolge nach:

1. Taskleiste verstecken

Delphi-Quellcode:
procedure TForm1.ShowTaskBar(AShow: Boolean); //Taskleiste ein/ausblenden
const
  cmdShow: array[Boolean] of Integer = (SW_HIDE, SW_SHOW);
var
  Handle: THandle;
begin
  repeat
    Handle := FindWindow('Shell_TrayWnd', nil);
    Sleep(200);
  until Handle <> 0;
  if Handle <> 0 then ShowWindow(Handle, cmdShow[AShow]);
end;
2. eigenes Programmfenster (onTop) liegt als eine Art Appbar über alles

Delphi-Quellcode:
SetWindowPos(Form1.Handle,HWND_TOPMOST,0, 0, 0, 0,SWP_NOMOVE or SWP_NOSIZE or SWP_SHOWWINDOW);

3. Start des ext. Programms , maximiert und Rahmenlos

Delphi-Quellcode:
RunProcess(appWithPath, SW_MAXIMIZE, FALSE, @ProcID);
setwindowlong(AppWindow, GWL_STYLE, getwindowlong(AppWindow, GWL_STYLE) and (not ws_dlgframe) and (not ws_border) and (not WS_SIZEBOX));

...

Alternativ auch als SW_Show gestartet und maximiert mit
ShowWindow(AppWindow,SW_MAXIMIZE);
Problem: die Taskleiste wird ausgeblendet, jedoch das ext. Programm maximiert nur bis auf oberhalb der ausgeblendeten Taskleiste.

Ich möchte gerne die ext. Anwendung Fullscreen-maximiert haben.

Gruß, bluescreen25

Luckie 24. Aug 2007 08:26

Re: ext. Programmstart + maximieren
 
Das liegt daran, dass die Taskleiste als Appbar registriert ist und somit den Arbeitsbereich des Desktops entsprechend verkleinert. Soll sich das Programm über den ganzen Bildschirm maximieren, musst du den Workspace entsprechend anpassen. Natürlich muss du ihn wieder zurücksetzen.

Aber was ist das:
Delphi-Quellcode:
repeat
    Handle := FindWindow('Shell_TrayWnd', nil);
    Sleep(200);
  until Handle <> 0;
Entweder wird das Fenster gefunden oder nicht. Wozu die Schleife?

bluescreen25 24. Aug 2007 08:41

Re: ext. Programmstart + maximieren
 
Zitat:

Zitat von Luckie
Das liegt daran, dass die Taskleiste als Appbar registriert ist und somit den Arbeitsbereich des Desktops entsprechend verkleinert. Soll sich das Programm über den ganzen Bildschirm maximieren, musst du den Workspace entsprechend anpassen. Natürlich muss du ihn wieder zurücksetzen.

Aber was ist das:
Delphi-Quellcode:
repeat
    Handle := FindWindow('Shell_TrayWnd', nil);
    Sleep(200);
  until Handle <> 0;
Entweder wird das Fenster gefunden oder nicht. Wozu die Schleife?

Upps, ja ich habs im Moment mit den Schleifen...Ziel der Angelegenheit hier ist das Starten und verwalten externer Anwendung aus meiner heraus. Lol, hast Recht, die Taskbar ist ja schon da im Gegensatz zu den ext. Anwendungen.

Nochmal zum Workspace....hilf mir mal auf die Sprünge....ich habe folgendes:

Delphi-Quellcode:
procedure TForm1.SetWorkArea;
 var w:TRect;
   begin
      // Aktuellen Zustand auslesen
      SystemParametersInfo(SPI_GetWorkArea, 0, Pointer( @MerkScreen), 0);
      ShowTaskBar(false);//Taskleiste verstecken
      SetWindowPos(Form1.Handle,HWND_TOPMOST,0, 0, 0, 0,SWP_NOMOVE or SWP_NOSIZE or SWP_SHOWWINDOW);
      w := MerkScreen;
      w.Top := w.top + Height;
      // neues WorkArea festlegen
      SystemParametersInfo( SPI_SetWorkArea,0,Pointer( @w),0);
      MakeWindowOpaque (Form1, Transparenz); //Transparenz an
      SetCursorPos(extFloating_X+(extFloating_W div 2),extFloating_Y+(extFloating_H div 2));
   end;


procedure TForm1.RestoreWorkArea;
 begin
   SetWindowPos(Form1.Handle,HWND_NOTOPMOST,0, 0, 0, 0,SWP_NOMOVE or SWP_NOSIZE or SWP_SHOWWINDOW);
   SystemParametersInfo(SPI_SetWorkArea, 0, Pointer( @RootScreen), 0);
   ShowTaskBar(true);
 end;
das ist eine alte Appbarsache, die aber nicht zum tragen gekommen ist. Wie kann ich hier den Workspace auf Fullscreen bekommen, nachdem die Taskleiste ausgeblendet ist. Eine Merkfunktion ist zumindest schon vorhanden. Nach "SetWorkArea" würde dann das ext. Programm starten.

Gruß,bluescreen25

bluescreen25 24. Aug 2007 19:36

Re: ext. Programmstart + maximieren
 
Reaktiviert und funzt:

Delphi-Quellcode:
procedure TForm1.SetWorkArea;
var Dummy:TRect;
begin
  ShowTaskBar(false);//Taskleiste verstecken
  // Aktuellen Zustand auslesen
  SystemParametersInfo(SPI_GetWorkArea, 0, Pointer( @MerkScreen), 0);
  SetWindowPos(Form1.Handle,HWND_TOPMOST,0, 0, 0, 0,SWP_NOMOVE or SWP_NOSIZE or SWP_SHOWWINDOW);
  Dummy := MerkScreen;
  Dummy.Bottom := Dummy.Top + Screen.Height;
  // neues WorkArea festlegen
  SystemParametersInfo( SPI_SetWorkArea,0,Pointer( @Dummy),0);
  MakeWindowOpaque (Form1, Transparenz); //Transparenz an
  SetCursorPos(extFloating_X+(extFloating_W div 2),extFloating_Y+(extFloating_H div 2));
end;
Gruß, bluescreen25


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