![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Timage [D7, XP]
mahab © (2007-04-16 18:13:00)Здравствуйте мастера! Двигаю мышью по форме Timage - мерцает. Как бы этот момент поправить?
Kolan (2007-04-18 15:33:00) [1]>
> вот именно, дергается, а почему?
Потому что неверно написано
procedure TForm3.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Sender is TImage then
begin
FMoseDown := True;
end;
end;
procedure TForm3.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (Sender is TImage) and FMoseDown then
begin
with (Sender as TImage) do
begin
Top := Top + Y Round(Height/2);
Left := Left + X Round(Width/2);
end;
end;
end;
procedure TForm3.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Sender is TImage then
FMoseDown := False;
end;
{RASkov} (2007-04-18 15:31:00) [2]> [17] Gadenysh (18.04.07 13:16)
var OldX, OldY: Integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
DoubleBuffered:=True;
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button<> mbLeft then Exit;
OldX:=X; OldY:=Y;
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if not (ssLeft in Shift) then Exit;
Image1.SetBounds(Image1.Left+X-OldX, Image1.Top+Y-OldY, Image1.Width, Image1.Height);
end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button<> mbLeft then Exit;
Image1MouseMove(Sender, [ssLeft], X, Y);
end;
end.
Ну вот ничего не дергается, фик его знает почему у вас дергается... Мышой может быстро дергаете?
Gadenysh (2007-04-18 13:16:00) [3]
> Vovan #2 (17.04.07 23:13) [15]
> Оно не мигает, оно дёргается.
вот именно, дергается, а почему?
Kolan (2007-04-18 12:23:00) [4]> X0 := X; Y0 := Y;
Вообще не нужны, проверил
Vovan #2 (2007-04-17 23:13:00) [5]Оно не мигает, оно дёргается.
DoubleBuffered надо ставить у формы, т.е. у парента.
Из обработчика OnMouseMove убрать последнюю строку:
if move = false then exit;
Image1.Left:=Image1.Left+ X - X0 ;
Image1.Top:=Image1.Top+Y - Y0 ;
// X0 := X; Y0 := Y;
Проверено - не мерцает, плавно ходит за мышкой.
Зяма (2007-04-17 19:33:00) [6]с наложением контролов итп - все вручную?
хыхы, вручнуйю все отрисовано и функцыонал тоже вручную
Вот это действительно хыхы...
Gadenysh (2007-04-17 19:26:00) [7]хыхы, вручнуйю все отрисовано и функцыонал тоже вручную
Зяма (2007-04-17 18:24:00) [8]У меня, например, на этих графикконтролах еще лежат всякие кнопочки, лабелы и прочая, да и с фоном при таскании как быть? с наложением контролов итп - все вручную?
ГрафикКонтрол не может быть Парент"ом других контролов. По природе своей. Как ты умудрился так сделать?
{RASkov} (2007-04-17 18:23:00) [9]> У меня, например, на этих графикконтролах еще лежат всякие
> кнопочки, лабелы и прочая,
Это что же за графконтролы, которые могут содержать другие контролы?
Gadenysh (2007-04-17 18:02:00) [10]
> {RASkov} (16.04.07 21:07) [9]
картинки рисовать - не пойдет. У меня, например, на этих графикконтролах еще лежат всякие кнопочки, лабелы и прочая, да и с фоном при таскании как быть? с наложением контролов итп - все вручную?
может есть чюдесный ход - чтобы ррраз и все стало летать? и почему WinControl - ы при аналогичных операциях так погано себя не ведут?
{RASkov} (2007-04-16 21:07:00) [11]> [6] mahab © (16.04.07 19:08)
> [8] Gadenysh (16.04.07 19:23)
> Подскажите куда копать
Не таскать GraphicControl - ы по форме, а рисовать картинки на канве формы...
Gadenysh (2007-04-16 19:23:00) [12]сам столкнулся с таким. GraphicControl - ы не только мигают, еще и тормозят где-то неимоверно, если их таскать таким способом. Подскажите куда копать, кто знает
Kolan (2007-04-16 19:17:00) [13]Я незнаю, единственное
Не,
Image1.Left:=Image1.Left+X X0 ;
Image1.Top:=Image1.Top+Y Y0 ;
а
if Sender is TImage then
with (Sender as TImage) do
begin
Left:=Left+X X0 ;
Top:=Top+Y Y0 ;
end;
Но это врядли поможет
mahab (2007-04-16 19:08:00) [14]Таскаю сам компонент. Может отловить paint но как? Tgraphiccontrol в диспетчеризации WM_PAINT не учавствуют.
procedure TForm1.FormCreate(Sender: TObject); //Классика
begin
move:=false;
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
If Button<>mbleft then exit;
move:=true;
x0:=x;y0:=y;
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if move=false then exit;
Image1.Left:=Image1.Left+X - X0 ;
Image1.Top:=Image1.Top+Y - Y0 ;
X0 := X;
Y0 := Y;
end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
move:=false;
end;
Kolan (2007-04-16 18:59:00) [15]Не неправильно. Я думал у TImage оно есть.
Так значит просто водите мышкой а Timage мигает?
Или вы таскаете сам Image.
Если последнее покажите код как таскаете
mahab (2007-04-16 18:50:00) [16]После установки у картинки свойства, при завершении программы выдается ошибка доступа. Я правильно установил свойство TWincontrol(Image1).DoubleBuffered:=true; ?
Kolan (2007-04-16 18:29:00) [17]У картинки установи.
mahab (2007-04-16 18:27:00) [18]Прошу пояснить. При установке этого свойства на форме остается след от рисунка.
Kolan (2007-04-16 18:13:00) [19]> [0] mahab © (16.04.07 18:13)
> Здравствуйте мастера! Двигаю мышью по форме Timage мерцает.
> Как бы этот момент поправить?
DoubleBuffered := True;
?