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

Вниз

Фон программы   Найти похожие ветки 

 
S!R!X   (2003-11-05 21:49) [0]

Пишу программу на MCK. У нее фон - картинка JPG (натянута на саму форму), форма - прямоугольник с закругленными краями. При перетаскивании мышкой за клиентскую облать идет перерисовка фона. Пробовал различные варианты, но правильно только с перерисовкой:

procedure TForm1.KOLForm1Show(Sender: PObj);
begin
jpg := Newjpeg;
jpg.LoadFromFile("fon.jpg");
applet.Width:=jpg.Width;
applet.Height:=jpg.Height;

end;

procedure TForm1.KOLForm1Paint(Sender: PControl; DC: HDC);
begin
jpg.Draw(applet.Canvas.Handle,0,0);
end;


Как от этого избавиться?


 
S!R!X   (2003-11-05 21:49) [0]

Пишу программу на MCK. У нее фон - картинка JPG (натянута на саму форму), форма - прямоугольник с закругленными краями. При перетаскивании мышкой за клиентскую облать идет перерисовка фона. Пробовал различные варианты, но правильно только с перерисовкой:

procedure TForm1.KOLForm1Show(Sender: PObj);
begin
jpg := Newjpeg;
jpg.LoadFromFile("fon.jpg");
applet.Width:=jpg.Width;
applet.Height:=jpg.Height;

end;

procedure TForm1.KOLForm1Paint(Sender: PControl; DC: HDC);
begin
jpg.Draw(applet.Canvas.Handle,0,0);
end;


Как от этого избавиться?


 
BelchonokH ©   (2003-11-05 22:09) [1]

У тебя XP наверное, у меня тоже перерисовка идёт, и ничего страшного, это от настроек винды зависит, в 98м вот у меня не отображать содержимое окна при перетаскивании стоит и всё нормально, ничего не перерисовывается...
ТОлько я не понял, почему картинка на апплет натягивается а не форму?


 
BelchonokH ©   (2003-11-05 22:09) [1]

У тебя XP наверное, у меня тоже перерисовка идёт, и ничего страшного, это от настроек винды зависит, в 98м вот у меня не отображать содержимое окна при перетаскивании стоит и всё нормально, ничего не перерисовывается...
ТОлько я не понял, почему картинка на апплет натягивается а не форму?


 
S!R!X   (2003-11-05 22:27) [2]

винды у меня 2000....
насчет ничего страшного я сомневаюсь, т.к. при перерисовки начинает моргать форма (видно перерисовку). На 98 тоже самое


 
S!R!X   (2003-11-05 22:27) [2]

винды у меня 2000....
насчет ничего страшного я сомневаюсь, т.к. при перерисовки начинает моргать форма (видно перерисовку). На 98 тоже самое


 
Gandalf ©   (2003-11-05 22:39) [3]

Ну флаг ставь при перетаскивании, который будет блокировать отрисовку.


 
Gandalf ©   (2003-11-05 22:39) [3]

Ну флаг ставь при перетаскивании, который будет блокировать отрисовку.


 
S!R!X   (2003-11-05 23:15) [4]

Точно... про флаги то я и забыл
спасибо Gandalf


 
S!R!X   (2003-11-05 23:15) [4]

Точно... про флаги то я и забыл
спасибо Gandalf


 
SPeller ©   (2003-11-06 01:30) [5]

А зачем при каждой перерисовке загружать картинку из файла??? Это тормоз для перерисовки. Может, если не грузить каждый раз, то и перерисовка незаметна будет?


 
SPeller ©   (2003-11-06 01:30) [5]

А зачем при каждой перерисовке загружать картинку из файла??? Это тормоз для перерисовки. Может, если не грузить каждый раз, то и перерисовка незаметна будет?


 
Vladimir Kladov   (2003-11-06 12:39) [6]

procedure TForm1.KOLForm1Show(Sender: PObj);
почему в OnShow? Это событие вызывается несколько чаще, чем 1 раз. Например, если форму минимизировать, а потом восстановить.
Будет как минимум потеря ресурсов, из-за того, что каждый раз создается новый jpg.


begin
jpg := Newjpeg;
jpg.LoadFromFile("fon.jpg");
applet.Width:=jpg.Width;
И почему applet, а не Form ?
applet.Height:=jpg.Height;

end;

procedure TForm1.KOLForm1Paint(Sender: PControl; DC: HDC);
begin
jpg.Draw(applet.Canvas.Handle,0,0);
а почему не jpg.Draw(DC,0,0); ?
end;


 
Vladimir Kladov   (2003-11-06 12:39) [6]

procedure TForm1.KOLForm1Show(Sender: PObj);
почему в OnShow? Это событие вызывается несколько чаще, чем 1 раз. Например, если форму минимизировать, а потом восстановить.
Будет как минимум потеря ресурсов, из-за того, что каждый раз создается новый jpg.


begin
jpg := Newjpeg;
jpg.LoadFromFile("fon.jpg");
applet.Width:=jpg.Width;
И почему applet, а не Form ?
applet.Height:=jpg.Height;

end;

procedure TForm1.KOLForm1Paint(Sender: PControl; DC: HDC);
begin
jpg.Draw(applet.Canvas.Handle,0,0);
а почему не jpg.Draw(DC,0,0); ?
end;


 
S!R!X   (2003-11-06 23:30) [7]

работает только в OnShow, иначе не хочет запускаться
applet на form уже исправил
jpg.Draw(form.canvas.handle,0,0) прочитал в уроках по KOL


 
S!R!X   (2003-11-06 23:30) [7]

работает только в OnShow, иначе не хочет запускаться
applet на form уже исправил
jpg.Draw(form.canvas.handle,0,0) прочитал в уроках по KOL


 
S!R!X   (2003-11-06 23:38) [8]

сделал так:

procedure TForm1.KOLForm1FormCreate(Sender: PObj);
var windowrgn:HRGN;
begin
jpg := Newjpeg;
jpg.LoadFromFile("fon.jpg");
windowrgn:=createroundrectrgn(0,0,form.Width,form.Height,100,100);
Setwindowrgn(form.Handle,windowrgn,true);
end;

procedure TForm1.KOLForm1Paint(Sender: PControl; DC: HDC);
begin
jpg.Draw(DC,0,0);
end;

все равно тоже самое =(


 
S!R!X   (2003-11-06 23:38) [8]

сделал так:

procedure TForm1.KOLForm1FormCreate(Sender: PObj);
var windowrgn:HRGN;
begin
jpg := Newjpeg;
jpg.LoadFromFile("fon.jpg");
windowrgn:=createroundrectrgn(0,0,form.Width,form.Height,100,100);
Setwindowrgn(form.Handle,windowrgn,true);
end;

procedure TForm1.KOLForm1Paint(Sender: PControl; DC: HDC);
begin
jpg.Draw(DC,0,0);
end;

все равно тоже самое =(


 
Gandalf ©   (2003-11-07 00:04) [9]

А флаг?


 
Gandalf ©   (2003-11-07 00:04) [9]

А флаг?


 
Vladimir Kladov   (2003-11-07 09:11) [10]

Еще одна возможная причина - тормоза при рисовании на канве контрола битмапа (который получился в jpg) с нессответствующими экрану параметрами. Можно попробовать создать bitmap нужной ширины/высоты и нарисовать jpg на нем, а потом рисовать уже этот битмап (jpg уже не нужен).

bmp := NewBitmap(jpg.Width, jpg.Height);
jpg.Draw( bmp.Canvas.Handle, 0, 0 );
jpg.Free;

....

bmp.Draw( DC, 0, 0 );


 
Vladimir Kladov   (2003-11-07 09:11) [10]

Еще одна возможная причина - тормоза при рисовании на канве контрола битмапа (который получился в jpg) с нессответствующими экрану параметрами. Можно попробовать создать bitmap нужной ширины/высоты и нарисовать jpg на нем, а потом рисовать уже этот битмап (jpg уже не нужен).

bmp := NewBitmap(jpg.Width, jpg.Height);
jpg.Draw( bmp.Canvas.Handle, 0, 0 );
jpg.Free;

....

bmp.Draw( DC, 0, 0 );


 
S!R!X   (2003-11-07 12:16) [11]

2 Gandalf: с флагами пробовал, все равно перерисовывается
2 Vladimir Kladov: сделал, результат - аналогичный
Выкладываю код программы
[CODE]
....
procedure TForm1.KOLForm1FormCreate(Sender: PObj);
var windowrgn:HRGN;
begin
jpg := Newjpeg;
jpg.LoadFromFile("fon.jpg");
bmp := NewBitmap(jpg.Width, jpg.Height);
jpg.Draw( bmp.Canvas.Handle, 0, 0 );
jpg.Free;
dragging:=false;
windowrgn:=createroundrectrgn(0,0,form.Width,form.Height,100,100);
Setwindowrgn(form.Handle,windowrgn,true);
end;

procedure TForm1.KOLForm1MouseUp(Sender: PControl;
 var Mouse: TMouseEventData);
begin
dragging:=false;
end;

procedure TForm1.KOLForm1MouseDown(Sender: PControl;
 var Mouse: TMouseEventData);
begin
if mouse.Button=mbleft then
 begin
 dragging:=true;
 oldleft:=mouse.x;
 oldtop:=mouse.y;
 end;
end;

procedure TForm1.KOLForm1MouseMove(Sender: PControl;
 var Mouse: TMouseEventData);
begin
if dragging then
 begin
 form.left:=form.left+mouse.X-oldleft;
 form.Top:=form.top+mouse.Y-oldtop;
 end;
end;

procedure TForm1.KOLForm1Paint(Sender: PControl; DC: HDC);
begin
bmp.Draw(DC,0,0);
end;
[/CODE]


 
S!R!X   (2003-11-07 12:16) [11]

2 Gandalf: с флагами пробовал, все равно перерисовывается
2 Vladimir Kladov: сделал, результат - аналогичный
Выкладываю код программы
[CODE]
....
procedure TForm1.KOLForm1FormCreate(Sender: PObj);
var windowrgn:HRGN;
begin
jpg := Newjpeg;
jpg.LoadFromFile("fon.jpg");
bmp := NewBitmap(jpg.Width, jpg.Height);
jpg.Draw( bmp.Canvas.Handle, 0, 0 );
jpg.Free;
dragging:=false;
windowrgn:=createroundrectrgn(0,0,form.Width,form.Height,100,100);
Setwindowrgn(form.Handle,windowrgn,true);
end;

procedure TForm1.KOLForm1MouseUp(Sender: PControl;
 var Mouse: TMouseEventData);
begin
dragging:=false;
end;

procedure TForm1.KOLForm1MouseDown(Sender: PControl;
 var Mouse: TMouseEventData);
begin
if mouse.Button=mbleft then
 begin
 dragging:=true;
 oldleft:=mouse.x;
 oldtop:=mouse.y;
 end;
end;

procedure TForm1.KOLForm1MouseMove(Sender: PControl;
 var Mouse: TMouseEventData);
begin
if dragging then
 begin
 form.left:=form.left+mouse.X-oldleft;
 form.Top:=form.top+mouse.Y-oldtop;
 end;
end;

procedure TForm1.KOLForm1Paint(Sender: PControl; DC: HDC);
begin
bmp.Draw(DC,0,0);
end;
[/CODE]


 
SPeller ©   (2003-11-07 13:46) [12]

Попробовал код. Как я и раньше предполагал, надо отлавливать сообщение формы WM_ERASEBKGND:

function TForm1.KOLForm1Message(var Msg: tagMSG; var Rslt: Integer): Boolean;
begin
 Result := False;
 case Msg.message of
   WM_ERASEBKGND: Result := True;
 end;
end;


 
SPeller ©   (2003-11-07 13:46) [12]

Попробовал код. Как я и раньше предполагал, надо отлавливать сообщение формы WM_ERASEBKGND:

function TForm1.KOLForm1Message(var Msg: tagMSG; var Rslt: Integer): Boolean;
begin
 Result := False;
 case Msg.message of
   WM_ERASEBKGND: Result := True;
 end;
end;


 
S!R!X   (2003-11-07 23:19) [13]

2 SPeller:
Спасибо огромное, а то я уж запарился с этой проблемой...


 
S!R!X   (2003-11-07 23:19) [13]

2 SPeller:
Спасибо огромное, а то я уж запарился с этой проблемой...


 
Lev   (2003-11-11 12:00) [14]

подскажите какой тип у переменных bmp, jpg?


 
Lev   (2003-11-11 12:00) [14]

подскажите какой тип у переменных bmp, jpg?


 
SPeller ©   (2003-11-11 14:41) [15]


> подскажите какой тип у переменных bmp, jpg?

Абстрактный


 
SPeller ©   (2003-11-11 14:41) [15]


> подскажите какой тип у переменных bmp, jpg?

Абстрактный



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

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

Наверх




Память: 0.52 MB
Время: 0.034 c
1-1082521589
zsv
2004-04-21 08:26
2004.05.09
Проверка на существование


9-1069953412
Stilgar
2003-11-27 20:16
2004.05.09
Дайте пару советов новичку.


14-1082022130
stone
2004-04-15 13:42
2004.05.09
Стенография для программиста :))


4-1079351543
Talla2k
2004-03-15 14:52
2004.05.09
аналог SelLength на WinApi


3-1081842986
avgur
2004-04-13 11:56
2004.05.09
Константы для Delphi 6.0





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