Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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;
?


Наверх

Титульная страница Поиск, карта сайта Написать письмо