![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как избавиться от двойной прорисовке окна [D7, WinXP]
Дмитрий_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;
Кнопка исчезает... И почему???