Главная страница
    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.47 MB
Время: 0.007 c
1-95844
MARcoDEN
2002-08-17 15:36
2002.08.29
Проблема со вставкой ProgressBar в StatusBar


1-95835
Бегемотик Йо
2002-08-16 23:29
2002.08.29
Сращиввание экзешников


1-95737
Novenkij
2002-08-18 18:05
2002.08.29
Когда возникает ошибка


14-95945
aga
2002-08-03 07:52
2002.08.29
IP


3-95644
Vladislav
2002-08-07 17:20
2002.08.29
Защита.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский