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 Border fremder Anwendung verstecken (https://www.delphipraxis.net/144448-border-fremder-anwendung-verstecken.html)

Björn Ole 8. Dez 2009 00:37


Border fremder Anwendung verstecken
 
Nabend,


ich fange eine fremde Anwendung auf einem Panel meines Formulars mittels SetParent
und passe die Größe bei Änderungen mittels SetWindowPos an.

Nun möchte ich aber, dass, während ich die Anwendung gefangen habe,
diese keine Border hat (also praktisch BorderStyle = bsNone).

1. Möglichkeit
Border über die WinAPI verstecken lassen... worüber ich komischerweise nichts gefunden habe, dachte das würde gehen.

2. Möglichkeit
Die Bordermaße herausbekommen und entsprechend die Anwendung größer darstellen lassen,
sodass der Client Bereich genau über dem Panel liegt.
Mit GetWindowRect und GetClientRect hatte ich bisher aber keine Erfolge.

3. Möglichkeit
Kenn ich nicht, aber ich hoffe jemand von Euch kann helfen?! :)


Grüßerle,
Björn

turboPASCAL 8. Dez 2009 02:30

Re: Border fremder Anwendung verstecken
 
Schau dir mal Delphi-Referenz durchsuchenGetWindowLong und Delphi-Referenz durchsuchenSetWindowLong an.
Beispiele gibt es auch im der Dp zu finden.

Astat 8. Dez 2009 02:54

Re: Border fremder Anwendung verstecken
 
Hallo Björn Ole, dies sollte dir weiterhelfen.

Delphi-Quellcode:

function SetParent(hWndChild, hWndNewParent: HWND; NewParentWidth,
  NewParentHeight: integer): boolean;
var
  hWndPrevParent: HWND;
  PrefWindowLong: DWORD;
begin
  hWndPrevParent := Windows.SetParent(hWndChild, hWndNewParent);
  if hWndPrevParent = 0 then
    raise exception.create('ERROR: SetParent failed!');

  //-- Rahmen entfernen
  PrefWindowLong := SetWindowLong(hWndChild, GWL_STYLE,
    GetWindowLong(hWndChild ,GWL_STYLE) and WS_BORDER);
  if PrefWindowLong = 0 then
    raise exception.create('ERROR: PrefWindowLong(1)');

  //-- Titelmenü entfernen
  PrefWindowLong := SetWindowLong(hWndChild, GWL_STYLE,
    GetWindowLong(hWndChild,GWL_STYLE) and not WS_CAPTION);
  if PrefWindowLong = 0 then
    raise exception.create('ERROR: PrefWindowLong(2)');


  //- Auf Paranet skalieren
  if not SetWindowPos(hWndChild, 0 ,0, 0, 0, 0, SWP_NOSIZE or
    SWP_NOMOVE or SWP_NOZORDER or SWP_FRAMECHANGED) then
      raise exception.create('ERROR: PrefWindowLong(3)');

  //-- Neu zeichnen
  if not SetWindowPos(hWndChild, 0, 0, 0, NewParentWidth,
    NewParentHeight, SWP_NOZORDER or SWP_SHOWWINDOW) then
      raise exception.create('ERROR: PrefWindowLong(4)');

  result := true;  
end;

hoffe etwas geholfen zu haben.

lg. Astat

Björn Ole 8. Dez 2009 12:58

Re: Border fremder Anwendung verstecken
 
Ach ich Nuss... :lol:

Danke Euch beiden!


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 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-2025 by Thomas Breitkreuz