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

Вниз

проблеммы GDI?   Найти похожие ветки 

 
brother ©   (2013-05-04 21:31) [0]

банальный код:

procedure TForm1.Button1Click(Sender: TObject);
begin
 Timer1.Enabled:= True; // установлен в 1
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 if (Left<=0) or (Top<=0) then
 begin
   timer1.Enabled:= false;
   exit;
 end;

 SetBounds(Left-5, Top-5, Width+5, Height+5);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 BorderStyle:= bsNone;  
end;


при ресайзе дергается низ и правая сторона изменяемой формы.
комментируем BorderStyle:= bsNone;  
ничего не дергается, почему и можно ли этого избежать?


 
robt2   (2013-05-04 21:38) [1]

а что мешает это делать в редакторе форм, нафига пихать в онкреате?


 
Eraser ©   (2013-05-04 22:12) [2]


> brother ©   (04.05.13 21:31) 

как сказали выше, настройки лучше делать в редакторе. Если что-то уж очень специфичное надо, то в CreateParams.


 
clickmaker ©   (2013-05-04 22:22) [3]

попробовал - ничего не дергается


 
grandad   (2013-05-04 23:21) [4]

А как должно дергаться то ?
Пробовал в Lz - тоже никаких артефактов не заметил.
И да, согласен с предыдущим оратором - такие вещи как изменение бордерстиля следует делать в перекрытом CreateParams.


 
clickmaker ©   (2013-05-04 23:26) [5]

в данном случае место, где меняется бордерстиль, значения не имеет


 
Юрий Зотов ©   (2013-05-04 23:50) [6]

> grandad   (04.05.13 23:21) [4]
> такие вещи как изменение бордерстиля следует делать
> в перекрытом CreateParams.


Как Вы считаете, где и когда происходит реальная установка стиля окна, если в Object Inspector выставлено свойство BorderStyle ?


 
Юрий Зотов ©   (2013-05-04 23:53) [7]

По сабжу: а зачем все это? Дергается, похоже из-за таймера, но может быть, есть другие способы? В чем сермяга-то?


 
clickmaker ©   (2013-05-05 00:03) [8]

анимация разворачивания окна?
я бы сделал так
SetBounds(Left-5, Top-5, Width+10, Height+10);


 
grandad   (2013-05-05 00:19) [9]


> Юрий Зотов ©   (04.05.13 23:50) [6]
> Как Вы считаете, где и когда происходит реальная установка стиля окна, если в Object Inspector выставлено свойство BorderStyle ?

К сожалению, у меня сейчас нет под рукой оригинальных исходников какой-либо из версий Delphi, но насколько помню окончательная установка стиля происходит именно в TCustomForm.CreateParams.

Напротив вызов TForm1.FormCreate происходит уже после создания окна в AfterConstruction.


> clickmaker ©   (05.05.13 00:03) [8]
>
> анимация разворачивания окна?
> я бы сделал так

Я бы анимации разворачивания не делал вообще. Это задача ОС.


 
Eraser ©   (2013-05-05 00:42) [10]


> clickmaker ©   (05.05.13 00:03) [8]
> анимация разворачивания окна?
> я бы сделал так



> grandad   (05.05.13 00:19) [9]


> Я бы анимации разворачивания не делал вообще. Это задача
> ОС.


http://msdn.microsoft.com/en-us/library/windows/desktop/ms632669(v=vs.85).aspx


 
grandad   (2013-05-05 01:37) [11]


> Eraser ©   (05.05.13 00:42) [10]
> http://msdn.microsoft.com/en-us/library/windows/desktop/ms632669(v=vs.85).aspx

Или так.
Хотя W7 прекрасно анимирует разворачивание и максимизацию окон и без принудительного вызова AnimateWindow.
Как посмотришь, какие глюки вылазят при совмещении анимации от ОС с вот такой вот самописной - жутко становиться...


 
Германн ©   (2013-05-05 01:41) [12]


> Eraser ©   (05.05.13 00:42) [10]

Это ж неинтересно. Интересно своими ручками попробовать. :)


 
Юрий Зотов ©   (2013-05-05 02:12) [13]

> grandad   (05.05.13 00:19) [9]

> окончательная установка стиля происходит
> именно в TCustomForm.CreateParams.


Совершенно верно. И происходит это уже после чтения DFM. Значит, установка BorderStyle в Object Inspector и в CreateParams c точки зрения сабжа равноценны, но в Object Inspector проще. Поэтому утверждение в [4] верно, но не оптимально.


 
Юрий Зотов ©   (2013-05-05 02:15) [14]

> grandad   (05.05.13 00:19) [9]

> Я бы анимации разворачивания не делал вообще. Это задача ОС.


А вот в этом я с Вами полностью согласен.

> Как посмотришь, какие глюки вылазят при совмещении анимации
> от ОС с вот такой вот самописной - жутко становиться...


И в этом тоже совершенно согласен.


 
Inovet ©   (2013-05-05 06:49) [15]

> [8] clickmaker ©   (05.05.13 00:03)
> анимация разворачивания окна?

Есть же
AnimateWindow


 
Inovet ©   (2013-05-05 06:54) [16]

> [15] Inovet ©   (05.05.13 06:49)

Уже все сказали...


 
brother ©   (2013-05-05 07:34) [17]

что, у меня одного дергается? О_о
d7 w7x64


 
brother ©   (2013-05-05 07:53) [18]

дерганье происходит не из-за таймера.
код:
procedure TForm1.HitTest(var Msg: TWMNcHitTest);
var
 X, Y: Integer;
begin
 inherited;
 X := Msg.XPos - Left;
 Y := Msg.YPos - Top;

 if PtInRect( Rect(0, 0, 10, 10), Point(X, Y) ) then
   Msg.Result:= HTTOPLEFT
end;

также дергает.
дерганье происходит (по карйней мере сильно заметное) при увеличении width и/или height и смене позиции left и/или top.
вообще, я хочу написать удобные для использования скины к форме. Приведенный мною код иммитирует ресайз формы, а вообще форма должна поддерживать изменение размеров как в
http://delphidevelop.ru/publ/2-1-0-207 например.


 
brother ©   (2013-05-05 08:14) [19]

видео:
http://yadi.sk/d/tbCJgbCa4ZLar
3 метра


 
Inovet ©   (2013-05-05 08:36) [20]

> [19] brother ©   (05.05.13 08:14)
> видео:

Чёт я бы не сказал, что дёргает.


 
brother ©   (2013-05-05 08:38) [21]

как назвать тогда?


 
Inovet ©   (2013-05-05 08:43) [22]

> [21] brother ©   (05.05.13 08:38)

Так куда ещё плавнее? Или я не туда смотрю? Смотрю на зелёное окошко.


 
brother ©   (2013-05-05 08:50) [23]

да на зеленое, при изменении размеров, что происходит с шириной и высотой, она дергается (меняется не плавно). О_о как это не видно? я даже в видео 30 фпс захват сделал, чтобы четко все видно было...


 
Inovet ©   (2013-05-05 08:58) [24]

> [23] brother ©   (05.05.13 08:50)

Тебе прямо идеально надо что ли? Окно всё-таки, не картинка.


 
brother ©   (2013-05-05 09:00) [25]

> комментируем BorderStyle:= bsNone;  
> ничего не дергается, почему и можно ли этого избежать?


 
grandad   (2013-05-05 12:30) [26]


> Юрий Зотов ©   (05.05.13 02:12) [13]
> Совершенно верно.

Спасибо дядя Юра. Я польщен :)


> brother ©   (05.05.13 08:14) [19]
> http://yadi.sk/d/tbCJgbCa4ZLar

Хмм... действительно неприятно дергается :\
На XP такого нету. А если отключить Аэро ?

Кстати.
Совсем недавно тут была тема о тормознутости реализации GDI в семерке. Разница в скорости была в несколько (4-10) раз. Может в этом причина ?


 
brother ©   (2013-05-05 16:33) [27]

Действаительно, проверил на виртулке с XP - все гуд...
Нашел, что создает такой эффект в 7:
Параметры быстродействия->Визуальные эффекты->Использование стилей отображения для окон и кнопок (если выключить, то все гуд)
Мдя, начинаю разочаровываться...


 
clickmaker ©   (2013-05-05 16:34) [28]

> [27] brother ©   (05.05.13 16:33)

а задача-то в чем была? )


 
brother ©   (2013-05-05 16:38) [29]

еще раз: пишу класс, для отрисовки своих элементов декорации окна (бордюр, кнопки закрытия итп), стандартные, убираем через BorderStyle:= bsNone;


 
clickmaker ©   (2013-05-05 16:50) [30]

> [29] brother ©   (05.05.13 16:38)

ну так, стили ОС тогда надо отключать


 
Inovet ©   (2013-05-05 16:50) [31]

> [29] brother ©   (05.05.13 16:38)
> стандартные, убираем через BorderStyle:= bsNone;

Так это вроде бы следует делать обработкой соотвествующих сообщений, в смысле - свои отрисовки служебных элементов взамен стандартных. Нет? Искать не хочу.


 
brother ©   (2013-05-05 17:28) [32]

да пошел простым путем...


 
brother ©   (2013-05-05 18:29) [33]

> ну так, стили ОС тогда надо отключать

не думаю, что это хорошая идея :)


 
clickmaker ©   (2013-05-05 18:52) [34]

> [33] brother ©   (05.05.13 18:29)

не глобально. Для своего приложения. SetWindowTheme(Handle, "", "")


 
brother ©   (2013-05-05 19:08) [35]

обрадовался, но не помогло.


 
robt2   (2013-05-05 19:18) [36]

есть же куча исходников компонентов с подобной скин-лабудой, там и посмотреть


 
brother ©   (2013-05-05 19:40) [37]

> с подобной скин-лабудой

прошу не применять ко мне подобные высказывания...


 
Cobalt ©   (2013-05-12 23:32) [38]

Автор, попробуй FireMonkey - может это оно?


 
brother ©   (2013-05-13 09:09) [39]

d7, да и самому хотелось покопаться...


 
brother ©   (2013-05-13 09:11) [40]

я имею ввиду отрисовку только бордюра окна...



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

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

Наверх




Память: 0.56 MB
Время: 0.006 c
2-1359138247
вова
2013-01-25 22:24
2013.10.20
Как проверить существование объекта типа TBitmap


1-1316769751
fd979
2011-09-23 13:22
2013.10.20
Экспорт в Excel


2-1359255545
Drowsy
2013-01-27 06:59
2013.10.20
Нарисовать зеркальную картинку.


15-1367927202
delphistorm
2013-05-07 15:46
2013.10.20
Где находится Exception Types to Ignore


11-1248519642
Ruzzz
2009-07-25 15:00
2013.10.20
EditBox, метод Add и св-во Caption