Autor Beitrag
Tendl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117



BeitragVerfasst: Di 23.12.03 15:42 
Sorry, aber ich habe noch ein ganz einfaches Problem:
Ich habe zwei Scrollboxen auf einem Form.
Mich interessiert, ob ich mit gedrückter Maustaste von einer Scrollbox auf die andere Scrollbox gewandert bin.
Das Event OnMouseUp liefert mir dazu X,Y Koordinaten(relativ), bleibt aber der Scrollbox zugeordnet, bei der die Bewegung begann.
Wie ermittele ich aus den relativen oder absoluten Koordinaten X,Y welche Komponente sich darunter befindet?

Danke im Voraus
Thomas
r0fel.xls
Hält's aus hier
Beiträge: 12

Win XP
D6
BeitragVerfasst: Di 23.12.03 17:08 
Das onMouseUp Ereignis der Form dürfte dir die richtigen Koordinaten geben. Es enthält auch x, y als Übergabeparameter.
Da musst du dann nur noch prüfen ob zb. (x > object.left) and x <(object.left+object.width) dann weißt du dass die Maus in diesem Object losgelassen wurde.
Wenn ich da deine Frage richtig verstanden habe :roll:
Tendl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117



BeitragVerfasst: Di 23.12.03 17:54 
Leider nicht so ganz.
Wenn mehrere Objekte in Frage kommen müsste ich mich durch irgendwelche Listen des Parentobjects suchen.

Ich suche eine Funktion wie

function getObjectAt(x,y):TObject

Ziel ist es bei einer Erweiterung des Projekts nicht immer den ganzen Suchvorgang anpassen zu müssen.

Trotzdem danke schön
Thomas
delphisual
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 89

WIN 2000
D5 Prof
BeitragVerfasst: Di 23.12.03 18:13 
Hi Tendl,

ich hoffe danach hast du gesucht :arrow:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure getObject(Sender: TObject);
begin
if (Sender is TButton=true) then Application.Messagebox('Sie haben auf eine Schaltfläche gedrückt','Informationsfenster',0);
if (Sender is TLabel) then Application.Messagebox('Sie haben auf einen Etikett gedrückt','Informationsfenster',0);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
getObject(Sender);
end;

procedure TForm1.Label1Click(Sender: TObject);
begin
getObject(Sender);
end;


MfG
delphisual

Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt

_________________
(Wer ein Problem definiert, hat es schon halb gelöst.)
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Di 23.12.03 18:22 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
function GetObjectAt(form: TForm; x,y: integer): TObject;
var
 i: integer;
begin
 result := nil;
 for i := 0 to form.ComponentCount-1 do
  if form.Components[i] is TControl then
   with TControl(form.Components[i]) do
    if PtInRect(ClientRect, point(x-left,y-top)) then
     result := form.Components[i];
end;


Als ersten Parameter einfach Self bzw TForm1 angeben
Beispiel:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
 p: TPoint;
 o: TObject;
begin
 p := ScreenToClient(mouse.CursorPos);
 o := GetObjectAt(self, p.x,p.y);
 if o <> nil then
  caption := o.ClassName
 else
  caption := '';
end;
Tendl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117



BeitragVerfasst: Mo 29.12.03 09:59 
Danke delphisual und obbschtkuche,

vor allem der letzte Tip hat mir geholfen mein Problem zu lösen.

Einen guten Rutsch an alle
Delphi-User und den Rest der Welt.
Thomas