Autor |
Beitrag |
daPimP
      
Beiträge: 54
Erhaltene Danke: 1
Win XP
D6, D7
|
Verfasst: Mo 07.06.04 21:52
N.Abend!
Also ich frage NICHT wie ich fremde Fenster per Handle verschieben kann
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?
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 ... Sy SS na pp er... coming soon
|
|
MartinPb
      
Beiträge: 698
|
Verfasst: 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 
      
Beiträge: 54
Erhaltene Danke: 1
Win XP
D6, D7
|
Verfasst: Mo 07.06.04 22:28
 Grrr
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 ... Sy SS na pp er... coming soon
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 08.06.04 12:54
Wie wärs mit ScreenToClient und ClientToScreen?
(Umwandlung von Screen-Koordinaten in Fenster-Koordinaten und umgekehrt...)
|
|
MartinPb
      
Beiträge: 698
|
Verfasst: 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: | Grrr
Also des war ja nu ein bisschen überflüssig! |
Anscheinend will er einen fertigen Quelltext  .
_________________ Gruß
Martin
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: 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 
      
Beiträge: 54
Erhaltene Danke: 1
Win XP
D6, D7
|
Verfasst: 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....
Zum wesentlichen
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.
Le big problèm  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 ... Sy SS na pp er... coming soon
|
|
daPimP 
      
Beiträge: 54
Erhaltene Danke: 1
Win XP
D6, D7
|
Verfasst: Di 08.06.04 19:09
im speziellen geht diese FRAGE an Motzi
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.  Vielleicht erst mal, wie die Funktionen heißen?
_________________ watch out ... Sy SS na pp er... coming soon
|
|
MartinPb
      
Beiträge: 698
|
Verfasst: 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 
      
Beiträge: 54
Erhaltene Danke: 1
Win XP
D6, D7
|
Verfasst: 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) 
_________________ watch out ... Sy SS na pp er... coming soon
|
|
MartinPb
      
Beiträge: 698
|
Verfasst: 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
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: 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.
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 
      
Beiträge: 54
Erhaltene Danke: 1
Win XP
D6, D7
|
Verfasst: Di 08.06.04 22:20
_________________ watch out ... Sy SS na pp er... coming soon
|
|