Форум: "Прочее";
Текущий архив: 2013.10.20;
Скачать: [xml.tar.bz2];
Внизпроблеммы 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;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.003 c