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

Вниз

Мерцание TImage при перемещении   Найти похожие ветки 

 
MK   (2002-01-06 16:26) [0]

Народ! Нужно избавиться от мерцания при перемещении TImage мышью. TImage находится на Panel, содержание из файла (LoadFromFile). TImage двигается через MouseMove - двигается замечательно, но мерцает постоянно. Что сделать, что перемещение было без мерцания? Спасибо.


 
XeN ©   (2002-01-06 22:48) [1]

Блин, надоело отвечать!
От мерцания не избавишься.
Юзай DelphiX or PowerDraw or OpenGL.


 
Olfi   (2002-01-08 14:59) [2]

Да! В натуре! Direct x учи! На нём такие базарные игры можно слепить! Типа... ты понял?


 
ad_tolya ©   (2002-01-09 00:42) [3]

Перехватывай WM_ERASEBACKGROUND (или что в этом роде...) от винды
(в имидже конечно) ну и ни чего там не делай... Просто оставь пустую процедурку без всяких inherited....
Удачи... :)))


 
drol ©   (2002-03-06 12:21) [4]

Доброго дня.
Сначала для XeN: нервные клетки не востанавливаются.
Теперь для МК: сделать можно. Ключевое слово BitBtl.
В TBitMap грузишь картинку, а потом на TImage показываешь её часть в зависимости от сдвига мыши. Только одна проблемма, в Delphi6 всё равно мерцает, а в D5 работает отменно, можно ворочать фотообои:)



 
Сергей Чурсин   (2002-04-14 14:37) [5]

DoubleBuffered у Parent попробуй true


 
SPeller ©   (2002-04-15 04:46) [6]

Во время перемещения можно удалить во временное хранилище содержимое имага, и использовать BitBlt(<приёмник>.Canvas.Handle, Image.Left,Image.Top,Image.Width,Image.Height,SrcDC,0,0);


 
VEG ©   (2002-04-15 16:23) [7]

Кладешь рисунок на Panel. В Panel есть свойство FullRepaint. Присваиваешь ему False. Все! Тлько двигай вместо рисунка Panel.


 
ZEE ©   (2002-04-15 22:19) [8]

Еще проще TImage вместо TPanel кладешь на TScrollBox и при MouseMove у TImage юзаешь ScrollBox1.ScrollBy(...) - мерцания практически нет ...
Да еще, кажется у TPanel тоже есть ScrollBy, так что может перекладывать на TScrollBox и не придется.


 
VEG ©   (2002-04-16 00:24) [9]

На панели вообще не мерцает!!!
Ни Labels, ни Images!!!


 
Yaro ©   (2002-04-16 02:55) [10]

Нифига на Panel"e не не мерцает, то есть мерцание = TRUE! нас нагло обманули (или я что-то сделал не так). Вот код:


var drag: boolean = false;
_x, _y: integer;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin if not Drag then exit;
Panel1.Left := Mouse.CursorPos.x - _x;
Panel1.Top := Mouse.CursorPos.y - _y;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin if drag then exit;
Drag := true;
Panel1.FullRepaint := false;
_x := Mouse.CursorPos.x - Panel1.Left;
_y := Mouse.CursorPos.y - Panel1.Top;
end;

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



 
ZEE ©   (2002-04-16 03:52) [11]

2 Yaro попробуй так (но с поправкой - Image на ScrollBox):


var drag:boolean;
xOfs,yOfs:integer;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
drag:=true;
xOfs:=X;
yOfs:=Y;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if not drag then exit;
ScrollBox1.ScrollBy(X-xOfs,Y-yOfs);
end;

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


Кажись так...


 
VEG ©   (2002-04-16 18:09) [12]

> Yaro В Panel есть свойство FullRepaint. Присваиваешь ему False.


Воот сааамый ЛУЧШИЙ код (А то предложенные кривоваты):

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
begin
ReleaseCapture;
Panel1.perform(WM_SysCommand, $F009, 0);
end;

Причем свойство FullRepaint ДОЛЖНО стоять в FALSE!!!


 
Yaro ©   (2002-04-17 01:46) [13]

VEG -> все пашет, но с недостатками..... не знаю, что эти строчки делают, но событие OnMouseUp не вызывается, вернее вызывается, но при втором клике...


 
ZEE ©   (2002-04-17 03:32) [14]

2 VEG: предложеный тобой код работает только с контролами (TPanel, TButton...), с TImage такой фокус не пройдет.


 
VEG ©   (2002-04-17 15:43) [15]

>ZEE
В данной задаче OnMouseUp СОВСЕМ не нужно!!!!
>Yaro
Panel1.perform(WM_SysCommand, $F009, 0);
А рисунок на панели!!! Разуй глаза и прочти код нормально!


 
VEG ©   (2002-04-17 15:49) [16]

Короче, кладем на ПАНЕЛЬ (Panel1) все комнпоненты, которые нужно двигать БЕЗ мерцания. Для события OnMouseDown тех компонентов, при клике по которому должно происходить перемещение пишешь:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Panel1.perform(WM_SysCommand, $F009, 0);//Двигаем ПАНЕЛЬ!!!
end;

Причем свойство FullRepaint у ПАНЕЛИ (Panel1) ДОЛЖНО стоять в FALSE!!!


 
Yaro ©   (2002-04-22 23:05) [17]

поньятно, спасыбо! :)



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

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

Наверх




Память: 0.5 MB
Время: 0.013 c
4-96007
Sirus
2002-06-25 06:39
2002.08.29
Как получить Handle формы Form3???


8-95912
som
2002-04-22 13:33
2002.08.29
PCX - файлы...


3-95708
billybons
2002-08-09 08:28
2002.08.29
не работает фильтр


1-95859
Cr@sh
2002-08-17 15:50
2002.08.29
Построение линий.


14-95965
Socol
2002-08-04 11:11
2002.08.29
Исходники