![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Тормоза в PaintBox'e
Ciber SLasH © (2003-11-16 09:11:00)Я тут начал переписывать на KOL свою прогу, вот из чего она состояла на VCL:
на форме 2 компонента TImage, в каждом из них уже загружены две jpg-шки, а сверху набросано несколько кнопок и edit-ов.
в VCL'e вобщем-то тормоза не заметны (в плане отрисовки), но когда я эти картинки прорисовывал в KOL-овском PaintBox'e, то было заметно как сначала на доли секунды появлялась форма, а потом появлялись картинки на PaintBox'e.
И ещё, у меня форма без заголовка, PaintBox растянут на всю ширину и длину формы, бордюры сброшены в ноль, но всё равно выдны по краям бордюры (т.е. куски формы). Как от этого избавиться ?
И что делать с тормозами ?
Ведь как-то не красиво, ты делаешь авторан для диска (как раз то что я и делаю), а картинки на форме прорисовываются с ткаой скоростью, что пользователь успевает заметить форму !!!
sepa (2003-11-19 10:00:00) [1]{$J+}
SPeller (2003-11-19 08:41:00) [2]Бррр..... Почисти uses, блин, ну что за детский сад? Надо же хоть чуть-чуть своей головой думать-то!!!
Ciber SLasH (2003-11-19 01:35:00) [3]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 скачянную с этого сайта.
miek (2003-11-18 16:40:00) [4]c>А что надо делать при этом событии ?
Да в том-то и дело, что ничего - только вернуть флаг успешного завершения. По умолчанию оно фон стирает дефолтным цветом. Причем по идее в KOL это должно быть отключено, но иногда самом собой включается.
SPeller (2003-11-18 08:22:00) [5]ЗЫ: и форма там за любое место таскается.
SPeller (2003-11-18 08:21:00) [6]Слушай возьми мою компоненту SPLPicture, загрузи в неё битмап (переведи свой жпег в бмп) и будь счастлив с отрисовкой! Там даже примерчик небольшой авторана для диска канает.
Ciber SLasH (2003-11-18 05:18:00) [7]Я понял, что нужно делать при 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; // признак перетаскивания окна
Ciber SLasH (2003-11-18 03:30:00) [8]Эй ! Народ.
Ответьте кто-нибудь.
Ciber SLasH (2003-11-16 23:57:00) [9]>И каким образом ты картинки отрисовываешь? Не через Pixels[], >часом?
Нет.
>А событие WM_ERASEBKGND перехватить не забыл
А что надо делать при этом событии ?
miek (2003-11-16 10:30:00) [10]И каким образом ты картинки отрисовываешь? Не через Pixels[], часом? А событие WM_ERASEBKGND перехватить не забыл?