Autor Beitrag
P@u1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 117



BeitragVerfasst: So 07.03.10 20:13 
Hallo,

ich möchte die innere Fenstergröße einer Anwendung (nicht der in Delphi geschriebenen Anwendung, sondern einer anderen) auf einen bestimmten wert setzen, also so, dass die "client area" egal wie groß der rahmen usw. eingestellt sind genau auf einen wert gelegt wird.

Dazu habe ich diese Funktion hier gefunden:
AdjustWindowRect

Ich habe folgendermaßen versucht, Sie anzuwenden:
ausblenden Delphi-Quelltext
1:
AdjustWindowRect(Rect(0,0,400,400),WS_BORDER,true);					


Ergibt diesen Fehler:
[Pascal Fehler] Unit1.pas(28): E2197 Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden

Und mit der Funktion wüsste ich auch nicht, wie ich das auf eine beliebige Anwendung anwenden kann.

Weiß jemand, wie man das machen kann?
Es ist nicht schlimm, wenn man die Fenstergröße danach wieder verstellen kann.
Zur Not würde es evtl. auch reichen, ein Programm mit einer bestimmten inneren Größe zu starten, aber besser wäre es, wenn die Größe zur Laufzeit gesetzt werden kann.

Hoffe, ihr könnt mir helfen.

Falls ihr was mit anfangen könnt:
Hab in einem C++ Forum was dazu gefunden:
www.tutorials.de/for...roesse-anpassen.html
Ich möchte es aber mit delphi hinkriegen^^

Vielen Dank für eure Hilfe schonmal!
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: So 07.03.10 20:43 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  r : TRect;
begin
  r := Rect(0,0,200,200);

  AdjustWindowRect(r,WS_BORDER,true);  
end;
P@u1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 117



BeitragVerfasst: So 07.03.10 20:59 
okay, danke, jetzt kommt kein error mehr.

Kann mir wer sagen, wie ich das jetzt anwenden kann, also welchen befehl muss ich benutzen um die größe eines beliebigen fensters zu ändern und wenn ich dafür das handle brauche wäre gut, wenn ihr mir auch noch sagen könnt, wie ich daran komme.

Edit: ich habe noch das hier gefunden:
windows-programming....ogramming_resize_tip

In Anlehnung daran habe ich dann folgenden Code entwickelt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure ClientResize(HWND: hWnd;nWidth: integer; nHeight: integer);
var
  rcClient, rcWindow: TRect;
  Diff: TPoint;
begin
  GetClientRect(hWnd, rcClient);
  GetWindowRect(hWnd, rcWindow);
  Diff.x := (rcWindow.right - rcWindow.left) - rcClient.right;
  Diff.y := (rcWindow.bottom - rcWindow.top) - rcClient.bottom;
  MoveWindow(hWnd,rcWindow.left, rcWindow.top, nWidth + Diff.x, nHeight + Diff.y, true);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ClientResize(Form1.Handle,100,100);
end;



Es funktioniert!

Jetzt muss ich nur noch wissen, wie man das handle von anwendungen rausfindet, ich werd mal im forum bischen suchen