![]() |
GetSystemMetrics - Rahmen eines Fensters
Hey Leute ich möchte die Größe eines externen Fensters bearbeiten, doch Delphi7 rechnet den Rand mit dazu. Ich will nur den hier rot markieren Bereich in der Größe ändern.
Bild: ![]() Dazu müsste ich ja GetSystemMetrics verwenden. Ich bin so weit:
Delphi-Quellcode:
Er startet ganz normal, dennoch wird der Rand dazugerechnet und nicht nur der rote Bereich.
var
HWND:THandle; Breite:Integer; Hoehe:Integer; BorderWidth:Integer; BorderHeight:Integer; begin BorderHeight:= 2 * GetSystemMetrics(SM_CXBORDER); BorderWidth:= GetSystemMetrics(SM_CYBORDER) + GetSystemMetrics(SM_CYCAPTION); Hoehe:= BorderHeight + SpinEdit1.Value; Breite:= BorderWidth + SpinEdit2.Value; HWND := FindWindow(nil, PChar(Edit1.Text)); SetWindowPos(HWND,HWND_TOPMOST,0,0,Breite,Hoehe,SWP_NOMOVE); end; Was könnte der Fehler sein ? |
AW: GetSystemMetrics - Rahmen eines Fensters
Probier's mal mit GetSystemMetrics(SM_CXSIZEFRAME).
MfG Dalai |
AW: GetSystemMetrics - Rahmen eines Fensters
Sieht jetzt so aus:
Delphi-Quellcode:
1280x720 eigegeben. 1272x690 Pixel herrausbekommen
var
HWND:THandle; Width:Integer; Height:Integer; List: TStrings; begin List := TStringList.Create; If Edit10.text='Breite' Then MessageDlg('Du hast keine Breite eingegeben', mtError, [mbOK], 0) Else If Edit11.text='Höhe' Then MessageDlg('Du hast keine Höhe eingegeben', mtError, [mbOK], 0) Else If ((Edit10.text<>'Breite') and (Edit11.text<>'Höhe')) Then Begin Width:= StrToInt(Edit10.text) + GetSystemMetrics(SM_CXSIZEFRAME); Height:= StrToInt(Edit11.text)+ GetSystemMetrics(SM_CYSIZEFRAME); HWND := FindWindow(nil, PChar(Edit1.Text)); SetWindowPos(HWND,HWND_NOTOPMOST,0,0,Width,Height,SWP_NOMOVE); end; try List.Add(Edit10.Text); List.Add(Edit11.Text); List.Add(Edit1.Text); List.SaveToFile('C:\Program Files\Premaider\Multifunktionstool\InhaltGröße.txt'); finally List.Free; end; end; |
AW: GetSystemMetrics - Rahmen eines Fensters
|
AW: GetSystemMetrics - Rahmen eines Fensters
Könntest du mir bitte erklären wie ich dort dann die Größe eintrage. Ich kann nie was aus der Doku rauslesen, bin noch n Anfänger :(
|
AW: GetSystemMetrics - Rahmen eines Fensters
Damit kann man natürlich keine Fenstergröße ändern, wie man im MSDN nachlesen kann. :roll:
Zitat:
Aus der Fenstergröße die Größe des Clientbereichs berechnen. Der umgekehrte Weg ist auch einfach. - aktuelle Fenstergröße nehmen, - das ClientRect berechnen lassen - die Different von WindowsRect und ClientRect ergibt das Offset, welches man dazurechnen muß, wenn man aus dem ClientRect das WindowRect berechnen will. Ansonsten mußt du aufpassen, welchen Fenstertyp man vor sich hat, wenn man es unbedingt selber berechnen will, wie z.B. ob ScrollBars sichtbar sind und ob es einen Offset (inneren Abstand) für den Clientberech gibt. - unterschiedliche Fenstertypen haben unterschiedliche Rahmen (schau dir mal den BorderStyle deiner TForms an) - Scrollleisten verkleinern auch den Klientbereich - usw. |
AW: GetSystemMetrics - Rahmen eines Fensters
Ich verstehe aber nicht wie ist das bei mir unterzubringen habe :S
|
AW: GetSystemMetrics - Rahmen eines Fensters
Könntet ihr mir vllt ein Beispiel geben ?
|
AW: GetSystemMetrics - Rahmen eines Fensters
Delphi-Quellcode:
Mit den Werten für dwStyle und dwExStyle musst du rumspielen bzw. lesen, welche Konstanten nötig sind (mit OR verknüpfen!).
var rect: TRect;
rect.bottom:= 720; rect.top:= 0; rect.left:= 0; rect.right:= 540; AdjustWindowRectEx(rect, WS_OVERLAPPEDWINDOW, False, 0); Wie die damit entstandenen Werte zu benutzen sind, sollte klar sein:
Delphi-Quellcode:
Übrigens solltest du mehr auf Exception-Handling achten, denn ein StrToInt() kann bei Eingabe von Nicht-Ziffern eine solche werfen. Beachte außerdem, dass eben dieses Exception-Handling in meinem Beispiel der Einfachheit halber ebenfalls fehlt.
HWND := FindWindow(nil, PChar(Edit1.Text));
SetWindowPos(HWND,HWND_NOTOPMOST,0,0,rect.right - rect.left, rect.bottom - rect.top,SWP_NOMOVE); Ich verstehe allerdings den Sinn hinter deinem Code noch nicht ganz. Du willst das Attribut OnTop eines fremdes Fenster setzen? Oder geht's dir um die Größe? Oder beides gleichzeitig? Wenn's nur um OnTop geht, dann setze doch die Werte für Width und Height auf 0. MfG Dalai |
AW: GetSystemMetrics - Rahmen eines Fensters
Hab in den Edits nur Zahleneingaben zugelassen. Allerdings habe ich den Begriff OR noch nie gehört xD
€: Bei größeren Werten wie 1280x720 stimmt alles. Bei kleinen Werten wie 111x111 stimmt es nicht (112x110) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 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