Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zuweisungs problem (https://www.delphipraxis.net/205267-zuweisungs-problem.html)

venice2 19. Aug 2020 14:57

Zuweisungs problem
 
Ich möchte in meiner Winproc lParam TWindowPos zuweisen finde die Lösung nicht.
Mein Fenster wird durch andere Anwendungen in der ZOrder verändert deshalb muss ich hier gegen wirken.

Delphi-Quellcode:
    WM_WINDOWPOSCHANGING:
      begin
        wp := TWindowPos(lParam);
        //...
      end;

invalid TypeCast.

TiGü 19. Aug 2020 15:09

AW: Zuweisungs problem
 
Das eine ist ein Record, das andere eine Ganzzahl.
Fällt der Groschen?

venice2 19. Aug 2020 15:10

AW: Zuweisungs problem
 
Zitat:

Zitat von TiGü (Beitrag 1472110)
Das eine ist ein Record, das andere eine Ganzzahl.
Fällt der Groschen?

Nein.
Oder meinst als PWindowPos definieren? (Scheint so) Denke du hast mich auf die Lösung gebracht. Danke

KodeZwerg 19. Aug 2020 15:16

AW: Zuweisungs problem
 
Was ist TWindowPos ?
So hol ich Koordinaten:
Delphi-Quellcode:
var pt: TPoint;

...

pt.x := Word(lParam);
pt.y := Word(lParam shr 16);
Hilft das weiter?

venice2 19. Aug 2020 15:18

AW: Zuweisungs problem
 
Zitat:

Zitat von KodeZwerg (Beitrag 1472113)
Was ist TWindowPos ?
So hol ich Koordinaten:
Delphi-Quellcode:
var pt: TPoint;

...

pt.x := Word(lParam);
pt.y := Word(lParam shr 16);
Hilft das weiter?

Nein ich will keine Koordinaten aber das kannst du nicht wissen.
Wie ich diese bekomme ist mir klar.
Danke!

Ich benötige das HWND von wp.hwndInsertAfter.

Delphi-Quellcode:
 
    wp: PWindowPos;
    //...
    WM_WINDOWPOSCHANGING:
      begin
        wp := @LParam;
        wp.hwndInsertAfter := GetWindow(VisRenderThread.ParentHandle, GW_HWNDNEXT);
        Result := 0;
        exit;
      end;
so gehts

venice2 19. Aug 2020 17:06

AW: Zuweisungs problem
 
Wie sieht das aus.
Was ist falsch mein Programm oder das Programm welches die ZOrder meiner Anwendung verändert?

Ich erstelle ein Window und setze dieses auf die nächste ZOrder meiner Anwendung.

Delphi-Quellcode:
procedure TBassVis.SizeMove;
var
  InsertAfter: HWND;
  rc: TRect;
begin
  if mVisParam.VisHandle <> 0 then
  begin
    InsertAfter := GetWindow(gG.MainHandle, GW_HWNDNEXT);

    SetWindowPos(mVisParam.VisContainerHandle, InsertAfter, 0, 0, 0, 0,
      SWP_NOMOVE or SWP_NOSIZE or SWP_NOOWNERZORDER or SWP_NOACTIVATE or SWP_ASYNCWINDOWPOS);

    GetWindowRect(HSprDisplayC, rc);
    MoveWindow(mVisParam.VisContainerHandle, rc.Left, rc.Top,
      rc.Right - rc.Left, rc.Bottom - rc.Top, false);
  end;
end;
Wenn sich das Fenster ändert führe ich SizeMove aus.

Delphi-Quellcode:
    WM_SIZE, WM_MOVE, WM_WINDOWPOSCHANGED, WM_IME_NOTIFY:
      if Assigned(VisBassVis) then
        VisBassVis.SizeMove;
und beim start nachdem die Vis gestartet wurde.

Das Problem ist nun verwende ich Camtasia dann verdreht mir diese Anwendung die ZOrder.
Das Programm scannt wohl alle Fenster der Anwendung verdreht dann aber die ZOrder bzw. setzt sie falsch warum auch immer.

Wie kann ich dem gegenwirken.

Meine Funktion wie ich mir das dachte funktioniert leider nicht.
Vielleicht hat ja noch jemand einen Tip.

EDIT:
Ok geht jetzt.
Ich schicke einfach ein WM_NCACTIVATE dann reorganisiert sich das wieder.
So ein murks das andere Anwendungen sich da rein klemmen.

Preview:


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