Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.13;
Скачать: CL | DM;

Вниз

Как переместить какой нибудь компонент по форме?   Найти похожие ветки 

 
MadGhost ©   (2005-01-30 02:55) [0]

Например я хочу на форме кинуть галочку, которую нажимаешь и можно было бы двигать любой компонент на форме, ну там TEdit, TLabel, TButton и др. снимаешь галочку и все, можно дальше работать с обновленным интерфейсом. Самое главное чтобы также можно было бы применять его к элементам создаваемым в рун-тайме.
че то с сендерами связано, экспериментировал, экспериментировал но так ни до чего и не докопался :(


 
olookin ©   (2005-01-30 02:56) [1]

А что тут такого сложного?


 
olookin ©   (2005-01-30 02:59) [2]

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 03:01) [3]

Сорри, вот тут ошибка:

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;


 
MadGhost ©   (2005-01-30 17:24) [4]

во, самое оно :) я в этом направлении экспериментировал чуть чуть, но чет сабж не хотел поддаваться :)

Суть вопроса в том что бы вот этот алгоритм прикрутить к любому компоненту созданому в run-time ?


 
MadGhost ©   (2005-01-30 17:35) [5]

т.е. создаешь как функции
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:55) [6]

вот что то типа такого:
(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).
и так далее?


 
_RusLAN ©   (2005-01-30 18:03) [7]

Все эти компоненты имеют общего предка,который имеет свойства Left и Top. Имхо это ТControl или TComponent, к нему и надо преобразовывать Sender"a


 
MadGhost ©   (2005-01-30 21:17) [8]

аха, спасибо :)



Страницы: 1 вся ветка

Текущий архив: 2005.02.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
3-1105622498
Russko
2005-01-13 16:21
2005.02.13
IBDataSet1.Insert


9-1099849062
MsShtaer
2004-11-07 20:37
2005.02.13
Тени в DirectX


3-1105613123
Stanislav
2005-01-13 13:45
2005.02.13
Аварийная остановка программы


1-1106842792
gonzales
2005-01-27 19:19
2005.02.13
Печать со 100% масштабом


1-1107174049
Andarkl
2005-01-31 15:20
2005.02.13
Иконки из файла