Текущий архив: 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.47 MB
Время: 0.007 c