Форум: "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