hallo jaenicke,
danke für Deine Antwort, leider weiß ich nicht, was Du mir sagen willst. Beispiele wären hilfreich.
Ein "TEdit" kann ich inzwischen verschieben. Leider klappt es mit Delphi 4 nicht bei "TComboBox". Dort kann ich keine Maus-Ereignisroutinen eintragen, da sie anscheinend nicht durchgereicht werden. Auch "TControl(ComboBox).OnMouseDown" wurde mit einer Fehlermeldung quittiert.
Vielleicht gibt es ja eine weitere Möglichkeit als "Work Around"? die Drag&Drop ermöglicht.
Hier die Lösung, die ich mit Hilfe des Link:
delphi.about.com/lib...weekly/aa102505a.htm erstellen konnte. Es wird ein "TEdit" und das dazugehörende "TLabel" bewegt. Speichern der neuen Position und Größe ist noch nicht implementiert:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74:
| procedure TForm1.ControlMouseDown( Sender: TObject; Button: TMouseButton; Shift : TShiftState; X, Y : Integer);
begin if (CB_DS_Cfg.Checked) AND (Sender is TWinControl) then begin Draging := True; SetCapture(TWinControl(Sender).Handle); GetCursorPos(oldPos); if ((Sender is TComboBox) or (Sender is TEdit)) and (TWinControl(Sender).Parent = PanelDS) then begin DragObj := TWinControl(GetControl( 'L_'+TWinControl(Sender).Name , Vertrieb.PanelDS )); end; end; end;
procedure TForm1.ControlMouseMove( Sender: TObject; Shift : TShiftState; X, Y : Integer);
const minWidth = 20; minHeight = 10; var newPos : TPoint; frmPoint : TPoint; begin if Draging then begin with TWinControl(Sender) do begin GetCursorPos(newPos);
if ssShift in Shift then begin Screen.Cursor := crSizeNWSE; frmPoint := ScreenToClient(Mouse.CursorPos); if frmPoint.X > minWidth then Width := frmPoint.X; if frmPoint.Y > minHeight then Height := frmPoint.Y; end else begin Screen.Cursor := crDrag; Left := Left - oldPos.X + newPos.X; Top := Top - oldPos.Y + newPos.Y; if DragObj <> Nil then begin DragObj.Left := DragObj.Left - oldPos.X + newPos.X; DragObj.Top := DragObj.Top - oldPos.Y + newPos.Y; end; oldPos := newPos; end; end; end; end;
procedure TForm1.ControlMouseUp( Sender: TObject; Button: TMouseButton; Shift : TShiftState; X, Y : Integer); begin if Draging then begin Screen.Cursor := crDefault; ReleaseCapture; Draging := False; DragObj := Nil; Screen.Cursor := crDefault; end; end; |
Für weitere Tipps und Beispiele wäre ich sehr dankbar!!
Grüße von der Nordsee
Peter
---
Moderiert von
Narses: Beiträge zusammengefasst---
Ein freundliches Hallo an alle,

endlich habe ich es verstanden! Die Mausereignisroutinen werden nicht bei den Anzeigeelementen z.B. "TEdit" eingetragen sondern bei dem übergeordneten Objekt also "TForm" oder "TPanel" u.s.w.. Dann kann man alle Objekte bewegen!
Grüße von der Nordsee
Peter
---
Moderiert von
Narses: Beiträge zusammengefasst---
Ein freundliches Hallo an alle,
da war ich wohl etwas voreilig.
Offenbar hat es Nebeneffekte mit anderen Ereignisroutinen und Einstellungen gegeben. Beim Einsatz an anderer Stelle: Banane. Vielleicht kann ja mal jemand die Zusammenhänge erklären!
Grüße von der Nordsee
Peter