![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как переместить какой нибудь компонент по форме? [D7, WinXP]
MadGhost © (2005-01-30 02:55:00)Например я хочу на форме кинуть галочку, которую нажимаешь и можно было бы двигать любой компонент на форме, ну там TEdit, TLabel, TButton и др. снимаешь галочку и все, можно дальше работать с обновленным интерфейсом. Самое главное чтобы также можно было бы применять его к элементам создаваемым в рун-тайме.
че то с сендерами связано, экспериментировал, экспериментировал но так ни до чего и не докопался :(
MadGhost (2005-01-30 21:17:00) [1]аха, спасибо :)
_RusLAN (2005-01-30 18:03:00) [2]Все эти компоненты имеют общего предка,который имеет свойства Left и Top. Имхо это ТControl или TComponent, к нему и надо преобразовывать Sender'a
MadGhost (2005-01-30 17:55:00) [3]вот что то типа такого:
(Sender as TEdit).left:=(Sender as TEdit).Left+x-oldx; (Sender as TEdit).top:=(Sender as TEdit).Top+y-oldy; end;
возможно для любого (см. перечисленного выше) компонента использовать одну эту функцию?
как? или для каждого компоннета, надо свою функцию писать, типа
(Sender as TButton).
(Sender as TMemo).
(Sender as TLabel).
и так далее?
MadGhost (2005-01-30 17:35:00) [4]т.е. создаешь как функции
procedure MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
потом
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.OnMouseUp:=MouseUp;
Edit1.OnMouseDown:=MouseDown;
Edit1.OnMouseMove:=MouseMove;
end;
а например в функции onMouseMove
if move then begin
edit1.left:=edit1.Left+x-oldx; edit1.top:=edit1.Top+y-oldy; end;
но как бы заменить edit1 на такое слово, тип акак Sender которое бы подходило под любой компонент, будь то TEdit, TLabel, TButton, TMemo, TCheck TPanel и другие.
кстати за алгоритм спасибо огромное, за этот :)
edit1.left:=edit1.Left+x-oldx; edit1.top:=edit1.Top+y-oldy;
MadGhost (2005-01-30 17:24:00) [5]во, самое оно :) я в этом направлении экспериментировал чуть чуть, но чет сабж не хотел поддаваться :)
Суть вопроса в том что бы вот этот алгоритм прикрутить к любому компоненту созданому в run-time ?
olookin (2005-01-30 03:01:00) [6]Сорри, вот тут ошибка:
edit1.left:=edit1.Left+x-oldx; edit1.top:=edit1.Top+y +oldy; end;
а надо
edit1.left:=edit1.Left+x-oldx; edit1.top:=edit1.Top+y -oldy; end;
olookin (2005-01-30 02:59:00) [7]var
Form1: TForm1;
oldx,oldy: integer;
move: boolean;
implementation
{$R *.DFM}
procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
move:= true; oldx:=x; oldy:=y;
end;
procedure TForm1.Edit1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if move then begin
edit1.left:=edit1.Left+x-oldx; edit1.top:=edit1.Top+y+oldy; end;
end;
procedure TForm1.Edit1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
move:=false;
end;
end.
olookin (2005-01-30 02:56:00) [8]А что тут такого сложного?