Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.16;
Скачать: CL | DM;

Вниз

Тормоза в PaintBox e   Найти похожие ветки 

 
Ciber SLasH ©   (2003-11-16 09:11) [0]

Я тут начал переписывать на KOL свою прогу, вот из чего она состояла на VCL:

на форме 2 компонента TImage, в каждом из них уже загружены две jpg-шки, а сверху набросано несколько кнопок и edit-ов.

в VCL"e вобщем-то тормоза не заметны (в плане отрисовки), но когда я эти картинки прорисовывал в KOL-овском PaintBox"e, то было заметно как сначала на доли секунды появлялась форма, а потом появлялись картинки на PaintBox"e.
И ещё, у меня форма без заголовка, PaintBox растянут на всю ширину и длину формы, бордюры сброшены в ноль, но всё равно выдны по краям бордюры (т.е. куски формы). Как от этого избавиться ?

И что делать с тормозами ?
Ведь как-то не красиво, ты делаешь авторан для диска (как раз то что я и делаю), а картинки на форме прорисовываются с ткаой скоростью, что пользователь успевает заметить форму !!!


 
miek ©   (2003-11-16 10:30) [1]

И каким образом ты картинки отрисовываешь? Не через Pixels[], часом? А событие WM_ERASEBKGND перехватить не забыл?


 
Ciber SLasH ©   (2003-11-16 23:57) [2]

>И каким образом ты картинки отрисовываешь? Не через Pixels[], >часом?
Нет.

>А событие WM_ERASEBKGND перехватить не забыл
А что надо делать при этом событии ?


 
Ciber SLasH ©   (2003-11-18 03:30) [3]

Эй ! Народ.
Ответьте кто-нибудь.


 
Ciber SLasH ©   (2003-11-18 05:18) [4]

Я понял, что нужно делать при WM_ERASEBKGND.
Всё бы ничего, да вот незадача: кинул я на форму панель, и при обрабатываю события перемещения. Так получается блин, что если медленно перемещать форму за панель, то всё нормально, а если чуть резче - то начинаются тормоза, крыса уходит вообще за форму, а форма не успевает переместиться на новое место. Чё делать, незнаю 8-()

Подскажите пожалуйста !!!

Вот текст моей проги:


function TForm1.KOLApplet1Message(var Msg: tagMSG;
 var Rslt: Integer): Boolean;
begin
 Result := false;
 case Msg.message of
   WM_ERASEBKGND: Result := true;
   WM_KEYDOWN: if Msg.wParam = VK_ESCAPE then
                 begin
                   Form.Close;
                   Result := true
                 end
 end
end;

procedure TForm1.Panel1MouseDown(Sender: PControl;
 var Mouse: TMouseEventData);
begin
 if Mouse.Button = mbLeft then  // если кнопка левая...
   begin
     OldLeft := Mouse.X;  // запоминаю позицию крысы
     OldTop := Mouse.Y;
     Dragging := True     // и включаю режим двиганья ;)
   end
end;

procedure TForm1.Panel1MouseMove(Sender: PControl;
 var Mouse: TMouseEventData);
begin
 if Dragging then  // если режим двиганья включен
   begin
     NewLeft := Mouse.X;  // записываю новые координаты крысы
     NewTop := Mouse.Y;
     Form.Left := Form.Left + NewLeft - OldLeft;  // устанавливаю координаты окна
     Form.Top := Form.Top + NewTop - OldTop
   end
end;

procedure TForm1.Panel1MouseUp(Sender: PControl;
 var Mouse: TMouseEventData);
begin
 if Mouse.Button = mbLeft then  //Если кнопка левая...
   Dragging := False       //Выключаю режим двиганья
end;

procedure TForm1.KOLForm1FormCreate(Sender: PObj);
var
 Stream: PStream;
 jpg: PJpeg;
begin
 Stream := NewMemoryStream;
 Resource2Stream(Stream, HInstance, "IMAGE", RT_RCDATA);
 Stream.Position := 0;
 jpg := NewJpeg;
 jpg.LoadFromStream(Stream);
 BImage := NewBitmap(jpg.Width, jpg.Height);
 jpg.Draw(BImage.Canvas.Handle, 0,0);
 Stream.Free;
 Stream := NewMemoryStream;
 Resource2Stream(Stream, HInstance, "WCAPTION", RT_RCDATA);
 Stream.Position := 0;
 jpg.LoadFromStream(Stream);
 BwCaption := NewBitmap(jpg.Width, jpg.Height);
 jpg.Draw(BwCaption.Canvas.Handle, 0,0);
 jpg.Free;
 Stream.Free
end;

procedure TForm1.KOLForm1Destroy(Sender: PObj);
begin
 BImage.Free;
 BwCaption.Free
end;

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

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

Глобальные переменные:
 public
   BImage,BwCaption: PBitmap;
   NewLeft,NewTop,OldLeft,OldTop: Integer;   // для координат окна
   Dragging: Boolean;                        // признак перетаскивания окна


 
SPeller ©   (2003-11-18 08:21) [5]

Слушай возьми мою компоненту SPLPicture, загрузи в неё битмап (переведи свой жпег в бмп) и будь счастлив с отрисовкой! Там даже примерчик небольшой авторана для диска канает.


 
SPeller ©   (2003-11-18 08:22) [6]

ЗЫ: и форма там за любое место таскается.


 
miek ©   (2003-11-18 16:40) [7]

c>А что надо делать при этом событии ?

Да в том-то и дело, что ничего - только вернуть флаг успешного завершения. По умолчанию оно фон стирает дефолтным цветом. Причем по идее в KOL это должно быть отключено, но иногда самом собой включается.


 
Ciber SLasH ©   (2003-11-19 01:35) [8]

2SPeller:
>Слушай возьми мою компоненту SPLPicture

Взял, поставил. Делаю проект, кидаю на форму твой компонент, компилю прогу и выпадает ошибка:

[Ошибка] SysUtils.pas(2238): Left side cannot be assigned to
[Ошибка] SysUtils.pas(2253): Left side cannot be assigned to
[Фатальная ошибка] Classes.pas(20): Could not compile used unit "SysUtils.pas"


Я использую подмену SysDCU и подмену Classes, Variants, SysUtils скачянную с этого сайта.


 
SPeller ©   (2003-11-19 08:41) [9]

Бррр..... Почисти uses, блин, ну что за детский сад? Надо же хоть чуть-чуть своей головой думать-то!!!


 
sepa ©   (2003-11-19 10:00) [10]

{$J+}



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

Текущий архив: 2004.05.16;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
1-1083258348
Черя
2004-04-29 21:05
2004.05.16
TrackBar и перехват л.к.м.


4-1080353007
MPS
2004-03-27 05:03
2004.05.16
Принудительное закрытие контекстного меню


1-1083207568
Артем К.
2004-04-29 06:59
2004.05.16
Как создать ярлык программы на рабочем столе?


14-1082993500
Piter
2004-04-26 19:31
2004.05.16
Фильм "Реальная любовь"


6-1080231779
Вика
2004-03-25 19:22
2004.05.16
авторизация и клиент-сервер MIDAS