AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Konvertierung Pixel nach Rect oder Denkfehler?
Thema durchsuchen
Ansicht
Themen-Optionen

Konvertierung Pixel nach Rect oder Denkfehler?

Ein Thema von KodeZwerg · begonnen am 3. Jun 2018 · letzter Beitrag vom 3. Jun 2018
Antwort Antwort
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

Konvertierung Pixel nach Rect oder Denkfehler?

  Alt 3. Jun 2018, 01:27
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!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.051 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Konvertierung Pixel nach Rect oder Denkfehler?

  Alt 3. Jun 2018, 10:30
Vielleicht solltest du mal schreiben, was du eigentlich willst? Suchst du einfach nur den Begriff Delphi-Referenz durchsuchenClientToScreen?
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Konvertierung Pixel nach Rect oder Denkfehler?

  Alt 3. Jun 2018, 10:50
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Konvertierung Pixel nach Rect oder Denkfehler?

  Alt 3. Jun 2018, 11:00
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
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Konvertierung Pixel nach Rect oder Denkfehler?

  Alt 3. Jun 2018, 11:04
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!
Gruß vom KodeZwerg

Geändert von KodeZwerg ( 3. Jun 2018 um 11:07 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Konvertierung Pixel nach Rect oder Denkfehler?

  Alt 3. Jun 2018, 11:07
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
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Konvertierung Pixel nach Rect oder Denkfehler?

  Alt 3. Jun 2018, 11:12
Du bist ein
Genau was ich brauchte, ja mega Denkfehler
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: Konvertierung Pixel nach Rect oder Denkfehler?

  Alt 3. Jun 2018, 11:18
Du bist ein
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
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Konvertierung Pixel nach Rect oder Denkfehler?

  Alt 3. Jun 2018, 11:22
LOL als ich das gerade einbaute hab ichs nach ClientRec umbenannt weils mir selber doof vorkam und es funktioniert bestens, danke danke!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:28 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