Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как избавиться от двойной прорисовке окна [D7, WinXP]


Страницы:   1 2

Дмитрий_05 ©   (2005-08-21 18:20:00) 

Проблема заключается в следующем... У меня на Form.Canvas рисуется изображение... При программном изменении размера окна форма перерисовывается, а потом приходится еще раз перерисовывать. Получается так, что при уменьшении Form.Left, изображение сначала прыгает влево, а потом рисуется как надо...:

var
BMPMain: TBitmap;

procedure TForm1.WMEraseBkGnd(var Msg: TWMERASEBKGND);
begin
BitBlt(Msg.DC, 0, 0, Form1.ClientWidth, Form1.ClientHeight, BMPMain.Canvas.Handle, 0, 0, SRCCOPY);
Msg.Result := 1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
...
BoundsRect := WRect;
GenerateBMPMain; //функция генерирует изображение под размеры окна
Form1.Invalidate; //перерисовываем форму, точнее рисуем сгенерированное изображение на Form.Canvas
end;


Как бы мне от этого избавиться?


Дмитрий_05   (2005-08-29 15:08:00) [1]

KilkennyCat ау!!!


Дмитрий_05   (2005-08-26 19:51:00) [2]

KilkennyCat совсем пропал куда-то...(((


KilkennyCat   (2005-08-25 08:50:00) [3]

:) сейчас, еще немного осталось ;)


Дмитрий_05   (2005-08-25 08:10:00) [4]

KilkennyCat не пропадай...


KilkennyCat   (2005-08-24 08:08:00) [5]


>  если не затруднит, Ваш вариант

вечером. спать пошел. или днем, если опять нихрена спать не дадут.


Турист   (2005-08-24 07:26:00) [6]

>KilkennyCat ©   (24.08.05 01:30) [28]
Вы видимо хорощо в этом разбираетесь, если не затруднит, Ваш вариант, аналогичный Турист   (23.08.05 20:32) [24]

Посмотреть PicShow я могу, только вот не пойму зачем ?


KilkennyCat   (2005-08-24 01:30:00) [7]

Когда нам нужно иметь эффект, мы делаем скриншот области формы, и рабочего стола под формой. Далее форму убиваем, оставляя на ее месте только ее картинку. Любым эффектом меняем ее с картинкой рабочего стола. По окончании эффекта восстанавливаем (или убиваем) форму в нормальное состояние. Идея не нова, даже компонент где-то видел. Преимущество: работа в вин 9х, нет дерганья, как в Вашем варианте (на старых машинах заметно), и особенный плюс - целая гамма эффектов. Посмотрите компонент PicShow: http://www.delphiarea.com/products/picshow/


Турист   (2005-08-23 23:16:00) [8]

>KilkennyCat ©   (23.08.05 23:07) [26]
Поясни, пожалуйста


KilkennyCat   (2005-08-23 23:07:00) [9]


> [24] Турист   (23.08.05 20:32)


Вау!

Намного лучше было бы работать с двумя скриншотами: формой, и то, что под формой, чем так извращать.


Турист   (2005-08-23 20:35:00) [10]

AlphaBlend = True


Турист   (2005-08-23 20:32:00) [11]

>Дмитрий_05   (23.08.05 15:08) [23]

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 if FDelta > 0 then begin
   if AlphaBlendValue + FDelta < 255 then
     AlphaBlendValue := AlphaBlendValue + FDelta
   else begin
     AlphaBlendValue := 255;
     FDelta := - FDelta
   end
 end else begin
   if AlphaBlendValue + FDelta > 0 then
     AlphaBlendValue := AlphaBlendValue + FDelta
   else begin
     AlphaBlendValue := 0;
     FDelta := -FDelta
   end
 end
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Timer1.Enabled := True
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 FDelta := 10;
 Timer1.Interval := 100;
end;


Дмитрий_05   (2005-08-23 15:08:00) [12]

Я что-то так никак не разберусь почему они исчезают... Есть ли какойнибудь другой способ плавного исчезновения, а потом появления формы?


Дмитрий_05   (2005-08-23 01:27:00) [13]

Большая разница... родительские классы разные... у TButton - TButtonControl, а он в свою очередь наследник TWinControl, а у TSpeedButton - TGraphicControl. Вот с TGraphicControl функция вроде как нормально работает, а с TWinControl неочень...(((


KilkennyCat   (2005-08-23 01:17:00) [14]


> [20] Defunct ©   (23.08.05 01:04)


я тоже так думал :)


Defunct   (2005-08-23 01:04:00) [15]

Дмитрий_05

Почему вы всегда со всем соглашаетесь?
Думал спросите:

А в чем отличие спид батона, от обычного батона? :)
А можно вместо батона использовать ну... хлеб например, или булку?

:)


Дмитрий_05   (2005-08-23 00:58:00) [16]

А... оказывается этот глюк не только с TButton, а со многими компонентами... У Edit-а и Memo исчезают бордюры, другие еще пока не смотрел... Что-то меня разочаровала эта функция... Есть ли какойнибудь аналог ей?


Дмитрий_05   (2005-08-23 00:58:00) [17]

А... оказывается этот глюк не только с TButton, а со многими компонентами... У Edit-а и Memo исчезают бордюры, другие еще пока не смотрел... Что-то меня разочаровала эта функция... Есть ли какойнибудь аналог ей?


Дмитрий_05   (2005-08-23 00:44:00) [18]

И правда не исчезает...)))


KilkennyCat   (2005-08-23 00:41:00) [19]

а... понятно.

Используйте SpeedButton.


Дмитрий_05   (2005-08-23 00:30:00) [20]

Вот грубый пример, на форму кинул кнопку и создал на нее событие:

procedure TForm1.Button1Click(Sender: TObject);
begin
AnimateWindow(Form1.Handle, 50, AW_BLEND or AW_HIDE); //исчезает
AnimateWindow(Form1.Handle, 50, AW_BLEND); //появляется
end;

Кнопка исчезает... И почему???


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо