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

Вниз

Перетаскивание динамически созданных image   Найти похожие ветки 

 
donduras   (2009-01-24 01:26) [0]

Здравствуйте.
Кто-нибудь может объяснить почему код



procedure TForm1.imu(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
b:=false;
end;

procedure TForm1.imm(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
if b=true then begin
(Sender as TImage).setbounds((Sender as TImage).Left+x-x0,
(Sender as TImage).top+y-y0,
(Sender as TImage).Width,
(Sender as TImage).height);
end;

end;

procedure TForm1.imd(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
b:=true;
x0:=x;
y0:=y;
end;


не работает для динамически созданных image? (в случае если мы просто разместим image на форме всё работает нормально)
И как это исправить?


 
Германн ©   (2009-01-24 01:32) [1]

А где размещены объявления этих процедур? И как они назначаются обработчикам
> динамически созданных image
?
И каким обработчикам?


 
donduras   (2009-01-24 01:38) [2]


type
 TForm1 = class(TForm)
   Image2: TImage;
   procedure imu(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
   procedure imm(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
   procedure imd(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);

.....

procedure TForm1.FormCreate(Sender: TObject);
var
i,k:integer;
begin

for i:=1 to 12 do begin
im[i]:=timage.Create(self);
im[i].Name:="im"+inttostr(i);
im[i].Parent:=self;

im[i].OnMouseDown:=imd;
im[i].OnMouseMove:=imm;
im[i].OnMouseUp:=imu;
end;

end;


 
Германн ©   (2009-01-24 02:43) [3]

Тогда что значит неработает?


 
Юрий Зотов ©   (2009-01-24 04:42) [4]

> donduras

Сильно удивился, что не работает (код немного грязноват, но ошибок в нем нет, все должно работать), скопировал Ваш код один-в-один и запустил проект. Результат вполне ожидаемый - все прекрасно работает. Почему Вы решили что не работает?


 
Leonid Troyanovsky ©   (2009-01-24 11:46) [5]


> donduras   (24.01.09 01:38) [2]

Dynmaically create controls and drag them around:

Here is an example. Create a new project with an empty form, add
StdCtls to the Uses clause (for the TLabel class, you can also add a
single label at design time). Add a handler to the forms OnClick
method, then modify the unit as below. Compile and run, click on the
form to create a label, drag on a label to move it.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
 StdCtrls;

type
 TForm1 = class(TForm)
   procedure FormClick(Sender: TObject);
 private
   { Private declarations }
   downX, downY: Integer;
   dragging: Boolean;
   procedure ControlMouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   procedure ControlMouseMove(Sender: TObject; Shift: TShiftState; X,
     Y: Integer);
   procedure ControlMouseUp(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}
Type
 TCracker = Class(TControl);
 { Needed since TControl.MouseCapture is protected }

procedure TForm1.FormClick(Sender: TObject);
var
 pt: TPoint;
begin
 // get cursor position, convert to client coordinates
 GetCursorPos( pt );
 pt := ScreenToClient( pt );
 // create label with top left corner at mouse position
 With TLabel.Create( Self ) Do Begin
   SetBounds( pt.x, pt.y, width, height );
   Caption := Format("Hit at %d,%d",[pt.x, pt.y]);
   Color := clBlue;
   Font.Color := clWhite;
   Autosize := true;
   Parent := Self;

   // attach the drag handlers
   OnMouseDown := ControlMouseDown;
   OnMouseUp   := ControlMouseUp;
   OnMouseMove := ControlMouseMove;
 End;
end;

procedure TForm1.ControlMouseDown(Sender: TObject; Button:
TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 downX:= X;
 downY:= Y;
 dragging := TRue;
 With TCracker(Sender) Do Begin
   MouseCapture := TRue;
   Color := clRed;
 End;
end;

procedure TForm1.ControlMouseMove(Sender: TObject; Shift: TShiftState;
X,
 Y: Integer);
begin
 If dragging Then
 with Sender As TControl Do Begin
   Left := X-downX+Left;
   Top  := Y-downY+Top;
 End;
end;

procedure TForm1.ControlMouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 If dragging then Begin
   dragging := False;
   With TCracker(Sender) Do Begin
     MouseCapture := False;
     Color := clBlue;
   End;  
 End;
end;

end.

Peter Below (TeamB)  100113.1101@compuserve.com)

--
Regards, LVT.



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

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

Наверх




Память: 0.48 MB
Время: 0.022 c
15-1231430120
Unknown user
2009-01-08 18:55
2009.03.15
Приложение разделенное на процессы


15-1231749928
b@v
2009-01-12 11:45
2009.03.15
Поиск по базе


2-1232640965
web-rider
2009-01-22 19:16
2009.03.15
Косячок с отправкой писем на мыло


2-1233142319
istok
2009-01-28 14:31
2009.03.15
D2009...


2-1229976790
Чайник
2008-12-22 23:13
2009.03.15
Как отобразить ProgressBar в ОТДЕЛЬНОМ ОКНЕ?