Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Konvertierung Pixel nach Rect oder Denkfehler? (https://www.delphipraxis.net/196601-konvertierung-pixel-nach-rect-oder-denkfehler.html)

KodeZwerg 3. Jun 2018 00:27

Konvertierung Pixel nach Rect oder Denkfehler?
 
Hallo, ich versuche bereits seit nem Halben Tag hinter das Geheimnis zu kommen aber ich stelle mich zu doof an oder habe einen mega Denkfehler.

Mein Vorhaben:
Ich hole mir über GetClientRect() ein Rechteck, nun ist Left und Top aber immer Null, also ersetze ich das mit den Left/Top von GetWindowRect().
Woran es momentan scheitert ist diese Zeile im Code:
Delphi-Quellcode:
 Windows.GetWindowRect(Win, FullRec);
 Windows.GetClientRect(Win, NewRec);
       Left := NewRec.Left+FullRec.Left+GetSystemMetrics(SM_CXFOCUSBORDER)+GetSystemMetrics(SM_CXBORDER)+GetSystemMetrics(SM_CXEDGE);
Es ist irgendwie egal mit was ich die Recs addiere, das Rect bewegt sich irgendwie nur micromillimeter Bereich.

Nun meine Frage oder Denkfehler: Wie wandel ich einen GetSystemMetrics() Pixelwert in einen Rect fähigen?

Danke fürs Lesen und ich bin für jeden Vorschlag offen!

Redeemer 3. Jun 2018 09:30

AW: Konvertierung Pixel nach Rect oder Denkfehler?
 
Vielleicht solltest du mal schreiben, was du eigentlich willst? Suchst du einfach nur den Begriff Delphi-Referenz durchsuchenClientToScreen?

p80286 3. Jun 2018 09:50

AW: Konvertierung Pixel nach Rect oder Denkfehler?
 
Ich habe das so verstanden, daß er die Client area ändern will, aber da gibt die Windows-Hilfe nicht viel her. Da frag ich mich, ob das überhaupt möglich ist.

Gruß
K-H

EWeiss 3. Jun 2018 10:00

AW: Konvertierung Pixel nach Rect oder Denkfehler?
 
Zitat:

Zitat von Redeemer (Beitrag 1403727)
Vielleicht solltest du mal schreiben, was du eigentlich willst? Suchst du einfach nur den Begriff Delphi-Referenz durchsuchenClientToScreen?

Ich denke das wird es sein.
ClientToScreen.. oder ScreenToClient je nachdem von wo er die Koordinaten im Rect haben will.

gruss

KodeZwerg 3. Jun 2018 10:04

AW: Konvertierung Pixel nach Rect oder Denkfehler?
 
Delphi-Quellcode:
 Windows.GetWindowRect(Win, FullRec);
 Windows.GetClientRect(Win, NewRec);
       Left := NewRec.Left+FullRec.Left+GetSystemMetrics(SM_CXFOCUSBORDER)+GetSystemMetrics(SM_CXBORDER)+GetSystemMetrics(SM_CXEDGE);
Zeile 1 = Das sind die Koordinate des "Win"-Fensters auf dem Desktop, inklusive Rahmen/Titelleiste
Zeile 2 = Das ist nur der Klient-Bereich des "Win"-Fensters, ohne Rahmen/Titelleiste, hier bekomme ich korrekte Width und Height her.
in Zeile 3 Versuche das "Left" anzupassen das es sich soweit nach Rechts bewegt das ich den Rand nicht mehr habe.
Das klappt nicht da die Pixel-Angaben zu Gering sind als das sich das weit genug nach Rechts bewegt um da zu beginnen wo der Client-Bereich Anfängt.
In der nächsten Zeile gleiches Problem mit der Caption, aber ich wollte hier erstmal nur das "Left" richtig hinbekommen.

Ich hoffe man kann nachvollziehen worum es mir geht.

edit
Danke, ich werde es gleich probieren mit den zwei Methoden!

EWeiss 3. Jun 2018 10:07

AW: Konvertierung Pixel nach Rect oder Denkfehler?
 
Beispiel.
Copy\Paste aus meiner SkinEngine.

Delphi-Quellcode:
  DC := GetDC(FOwner);
  hDCBack := CreateCompatibleDC(DC);

  GetClientRect(Handle, rc);

  GetWindowRect(Handle, rw);
  lp.x := rw.Left;
  lp.y := rw.Top;
  ScreenToClient(FOwner, lp);

  SelectObject(hDCBack, SkinEngine.GetBackBitmap(FOwner));
    BitBlt(DC, lp.x, lp.y, rc.Right, rc.Bottom, hDCBack, lp.x,
      lp.y, SRCCOPY);
  DeleteDC(hDCBack);
  ReleaseDC(FOwner, DC);
gruss

KodeZwerg 3. Jun 2018 10:12

AW: Konvertierung Pixel nach Rect oder Denkfehler?
 
Du bist ein :angel:
Genau was ich brauchte, ja mega Denkfehler

EWeiss 3. Jun 2018 10:18

AW: Konvertierung Pixel nach Rect oder Denkfehler?
 
Zitat:

Zitat von KodeZwerg (Beitrag 1403736)
Du bist ein :angel:
Genau was ich brauchte, ja mega Denkfehler

Beachte die Namensgebung kann nicht falsch sein.
FullRec, NewRec ist nichts sagend.

Am besten Variablen verwenden die Aussagekräftig sind.
rc, rw: TRect.

wobei r für rect und c für Client steht
wobei r für rect und w für Window steht.

Kein Maßregeln nur ein Vorschlag.. tu wie du willst. ;)

gruss

KodeZwerg 3. Jun 2018 10:22

AW: Konvertierung Pixel nach Rect oder Denkfehler?
 
LOL als ich das gerade einbaute hab ichs nach ClientRec umbenannt weils mir selber doof vorkam und es funktioniert bestens, danke danke!:thumb:


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