Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2002.08.29;
Скачать: [xml.tar.bz2];

Вниз

Мерцание 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 вся ветка

Форум: "Media";
Текущий архив: 2002.08.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.016 c
1-95836
Alcatraz
2002-08-17 13:32
2002.08.29
Как сделать опрделение дисков в Дельфи ?


8-95916
Chir
2002-04-20 21:15
2002.08.29
Проигрывание *.bik файлов


6-95933
sanilo
2002-06-19 12:51
2002.08.29
Одноранговая сеть;)


3-95655
Abu
2002-08-07 16:35
2002.08.29
DisplayFormat в run time


3-95693
AlexE
2002-08-08 15:23
2002.08.29
Как через SQL-запрос передать в БД символы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский