Форум: "Начинающим";
Текущий архив: 2009.03.15;
Скачать: [xml.tar.bz2];
ВнизПеретаскивание динамически созданных 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.049 c