Autor Beitrag
daPimP
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54
Erhaltene Danke: 1

Win XP
D6, D7
BeitragVerfasst: Mo 07.06.04 21:52 
N.Abend!

Also ich frage NICHT wie ich fremde Fenster per Handle verschieben kann

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var P:trect;
begin
 GetWindowRect(HandleDesFensters, P);

 MoveWindow(HandleDesFensters,
 left,
 top,
 width,
 height,
 true);
end;


SONDERN ich will einzelne Komponenten deren Handle ich kenne, in Größe und Position verändern!
Das würde ja schon mit diesem Quellcode klappen, aber GetWindowRect geht ja immer von der oberen Ecke (0,0) aus, während ich im Prinzip die obere Ecke des Fenster bräuchte auf der die Komponente sitzt.

Verstanden? :wink:

Denn wenn ich Komponenten wie oben beschrieben verschiebe, liegen die ausserhalb des sichtbaren Fensters!

Bsp: Wenn ich die Angabe auslese: TButton ist 100 top, 200 left (zur oberen Ecke des Fensters)
und ich ihn erneut auf 100 top, 200 left ( zur oberen Screenecke setze, geht das ja schief)


ideas :?:

_________________
watch out ... SySSnapper... coming soon
MartinPb
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 698



BeitragVerfasst: Mo 07.06.04 22:08 
Fenster ist unter Windows nicht nur das Fenster, sondern fast alles. Auch ein Button ist ein Fenster. Betrachte das aus dieser Sicht.

_________________
Gruß
Martin
daPimP Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54
Erhaltene Danke: 1

Win XP
D6, D7
BeitragVerfasst: Mo 07.06.04 22:28 
:evil: Grrr :evil:

Also des war ja nu ein bisschen überflüssig!

Nehmen wir an, ich verwende die oben angegebene Möglichkeit, dann brauch ich die Möglichkeit von einer Komponente meiner Wahl auf das TOPWINDOW (also ein Fenster im eigentlichen Sinne mit minimieren und maximieren!!! :? ) zuzugreifen um diese Position auszulesen und dann

nach dem Motto

Position Komponente - Position Fenster = gesuchte Position

_________________
watch out ... SySSnapper... coming soon
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 08.06.04 12:54 
Wie wärs mit ScreenToClient und ClientToScreen?
(Umwandlung von Screen-Koordinaten in Fenster-Koordinaten und umgekehrt...)
MartinPb
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 698



BeitragVerfasst: Di 08.06.04 13:31 
jaenicke hat folgendes geschrieben:
Wie wärs mit ScreenToClient und ClientToScreen?
(Umwandlung von Screen-Koordinaten in Fenster-Koordinaten und umgekehrt...)


Er arbeitet mit fremden Fenstern, also mit API. Aber so schwer ist es denoch nicht. Wie ich schon oben geschreiben habe ist alles unter Windows ein Fenster. Man muß also nur die Positionen zweier Fenster bestimmen; des Hauptfensters und des Childfensters. Dann addiert man zu dem Childfenster die Koordinate des Hauptfensters und schon hat man das gesuchte Ergebnis. Aber was sagte daPimP auf den Tip?

daPimP hat folgendes geschrieben:
:evil: Grrr :evil:

Also des war ja nu ein bisschen überflüssig!


Anscheinend will er einen fertigen Quelltext :roll: .

_________________
Gruß
Martin
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Di 08.06.04 13:39 
Es gibt auch API-Funktionen die genau dasselbe machen wie ScreenToClient und ClientToScreen .. (wenn ich mich recht erinnere heißen die sogar fast genauso). Kann jetzt aber leider nicht nachschaun, da ich auf der Uni bin..

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
daPimP Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54
Erhaltene Danke: 1

Win XP
D6, D7
BeitragVerfasst: Di 08.06.04 18:26 
@MartinPb
Zitat:
Aber was sagte daPimP auf den Tip?


Was ich damit sagen wollte ist, dass mir das nix bringt. Ich bin nicht DER Quellcodehascher, das wirst du spätestens im Sommer sehn, wenn dir mein kleines Tool über den Weg läuft. Aber bis dahin is noch ein bisserl Arbeit nötig.... 8)

Zum wesentlichen :wink:

1: Ist es möglich von einer "Komponente" auf das "Fenster" zu schließen?
ANTWORT 1: Ja, aber WIE ???

2: Ich lese die Koordinaten einer Komponente aus und erhalte den Abstand von der oberen ScreenEcke
des Desktops bis zu meiner Komponente.

Nun änder ich die Position der Komponente mit MoveWindow.
Soweit sollte es klar sein, was ich meine. MoveWindow ist korrekt!
Was ich nicht gebacken bekomme, sind die korrekten Positionsdaten anzugeben.

Breite und Höhe der Komponente ist ebenfalls korrekt. :P

:idea: Le big problèm :idea: sind die Seiten- und Höhenangaben der Komponente zum "Fenster", da ich wie gesagt, nur die Seiten- und Höhenangaben der Komponente zum "Nullpunkt des Desktops" habe!


Vorschläge weiterhin erwünscht!

_________________
watch out ... SySSnapper... coming soon
daPimP Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54
Erhaltene Danke: 1

Win XP
D6, D7
BeitragVerfasst: Di 08.06.04 19:09 
im speziellen geht diese FRAGE an Motzi 8)

Mein Problem hast du in deinem Prog X-Spy ja auch gelöst.

Ich suche mit der Maus die Komponente und lass mir über Properties alle Infos anzeigen!

Rectangle: ...
Restored Rect: ...
Client Rect: ...

Im speziellen benötige ich den ersten Klammerwert von Rectangle (schätze du ließt das "Fenster" aus, wo die "Komponente" drauf sitzt.)

Ne Hilfe dazu wär nett. :roll: Vielleicht erst mal, wie die Funktionen heißen?

_________________
watch out ... SySSnapper... coming soon
MartinPb
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 698



BeitragVerfasst: Di 08.06.04 19:31 
daPimP hat folgendes geschrieben:
1: Ist es möglich von einer "Komponente" auf das "Fenster" zu schließen?
ANTWORT 1: Ja, aber WIE ???


GetParent

_________________
Gruß
Martin
daPimP Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54
Erhaltene Danke: 1

Win XP
D6, D7
BeitragVerfasst: Di 08.06.04 20:18 
An diese func hab ich auch schon gedacht.

Aber es gibt mir ja nur das Handle von der Komponente die "drunterliegt".
Also müsste ich solange GetParent(GetParent(GetParent(UrHandle))) abfangen, bis ich auf das "Fenster" komme. Woher aber nun weiß ich, was das "Fenster" ist?
( Also das Formular, wenn de so willst) :wink:

_________________
watch out ... SySSnapper... coming soon
MartinPb
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 698



BeitragVerfasst: Di 08.06.04 20:57 
GetParent in Delphi eingeben und F1 drücken. Da steht, daß ein Hauptfenster den Wert NULL (0) zurückgibt. Also GetParent in eine While Schleife setzten und ausführen bis die 0 kommt. Ist doch nicht schwer.

_________________
Gruß
Martin
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Di 08.06.04 21:52 
Prinzipiell.. gehts hier um Komponenten oder allgemein um Fenster? Prinzipiell muss man immer zwischen VCL-Methoden und API-Funktionen unterscheiden und gerade in diesem Bereich existieren viele Funktionen mit gleichem Namen.

Die API bietet dieselben Möglichkeiten wie die VCL (komisch, schließlich baut die VCL auch nur auf diesen APIs auf.. ;)). Ich verwende in meinem X-Spy nur GetWindowRect, aber man kann diese Koordinaten auch noch mit der API-Funktion ScreenToClient umrechnen:
PSDK hat folgendes geschrieben:
The ScreenToClient function converts the screen coordinates of a specified point on the screen to client-area coordinates.
ausblenden Quelltext
1:
2:
3:
4:
BOOL ScreenToClient(
  HWND hWnd,        // handle to window
  LPPOINT lpPoint   // screen coordinates
);


The function uses the window identified by the hWnd parameter and the screen coordinates given in the POINT structure to compute client coordinates. It then replaces the screen coordinates with the client coordinates. The new coordinates are relative to the upper-left corner of the specified window's client area.

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
daPimP Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54
Erhaltene Danke: 1

Win XP
D6, D7
BeitragVerfasst: Di 08.06.04 22:20 
Ich dank euch fürs erste.

Werd das morgen mal umsetzten und dann einen LösungsCode reinstellen.

Vielleicht ist ja noch so jemand im Netz unterwegs, der gerne Fenster und Komponenten verschiebt!!

:wink: :wink: :wink: :wink: :wink: :wink:

_________________
watch out ... SySSnapper... coming soon