Entwickler-Ecke

Sonstiges (Delphi) - Innere Fenstergröße setzen


P@u1 - So 07.03.10 20:13
Titel: Innere Fenstergröße setzen
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:

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:
http://www.tutorials.de/forum/c-c/155715-fenstergroesse-anpassen.html
Ich möchte es aber mit delphi hinkriegen^^

Vielen Dank für eure Hilfe schonmal!


FinnO - So 07.03.10 20:43


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 - 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:
http://windows-programming.suite101.com/article.cfm/windows_gui_programming_resize_tip

In Anlehnung daran habe ich dann folgenden Code entwickelt:

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