Fenster verschieben und wieder zurücksetzen

Liebe/-r wer-weiss-was Experte/-in,

ich muß ein Programm in Delphi schreiben, welches sich von einem
beliebigen Fenster, dessen Handle ich habe alle Koordinaten holt und
diese ändert. Später muß ich das Fenster wieder an die
Originalpostion zurücksetzen. Ich habe schon mit Getwindowplacement,
Setwindowplacement sowie setwindowpos gebastelt. Dabei schreibe ich
die Werte in eine Variable vom Typ TWindowplacement. Bei
Setwindowplacement passiert aber anscheinend nichts.

Warscheinlich habe ich nur eine Kleinigkeit vergessen, finde den
Fehler aber nicht.

Für Deine / Ihre Mühe bedanke ich mich jetzt schon ein mal…

Bis dann, dann…

it works ;o)

procedure TForm1.Button1Click(Sender: TObject);
begin
getmem(P,SizeOf(WindowPlaceMent));
—>>>> P.Length:=SizeOf(WindowPlaceMent);
GetWindowPlaceMent(Handle,P);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
SetWindowPlacement(Handle, P);
end;

Hallo,

víelen Dank für Deinen Beitrag.

Ich habe das bei mir mal eingegeben, was auch Prima klappt. P habe ich als pWindowPlacement deklariert, da es den Typ Windowplacement, den du angegeben hast scheinbar nicht gibt.

Wenn ich das Programm aber beende bekomme ich ein EAccessviolationError. Dann habe ich Versucht mit Getmem§, bzw. Getmem(P,P.length) den Speicher freizugeben, was aber jeweils den gleichen Fehler verursacht.

Wie muß ich die Prozedur, die ja super funktioniert beenden, damit ich keinen Fehler habe und alles sauber läuft. Eine Exception möchte ich vermeiden, da das in einer Schleife laufen soll und das ja nicht der schönste Weg ist.

Vielen Dank auf jeden Fall schon ein mal!!!

Bis dann, dann

S. Lorenz

Freigabe machst über Dispose§;
Deklaration als PWindowPlacement ist korrekt, hab ich nur net mitgepostet, sorry

viel Erfolg

Rüdiger

Hallo,

ganz so war es nicht, ich mußte bei Sizeof Twindowplacement angeben. Hab ich dann woanders gefunden. Dispose hat übrigens auch nicht funktioniert. Folgendes funktioniert aber einwandfrei:

var AKFenster:stuck_out_tongue:windowplacement;
begin
getmem(AKFenster,SizeOf(tWindowPlacement));
AKFenster.Length := SizeOf(tWindowPlacement);

getwindowplacement(Fensterhandle,AKFenster)

usw.

Jetzt will ich nur noch den Eintrag aus der Taskleiste entfernen. Natürlich klappt das auch nicht. Mit folgenden klappts bei mir selbst:

var gw:hwnd;
begin
GW:=GetWindow(handle,GW_OWNER);
ShowWindow(GW,SW_HIDE);
end;

Aber wenn ich ein anderes Programmm entfernen möchte, wird das ignoriert. Gebe ich also z.B. das Handle vom Notepad an, (welches auch richtig ist) passiert gar nichts:frowning:((

Bis dann, dann…

–> Es wird mit Delphi NIE langweilig, jeden Tag ein anders Porblem…

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]