Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1367851241
Писатель
2013-05-06 18:40
2013.10.20
Delphi XE5(поддержка Андроид)


10-1180359297
bronco79
2007-05-28 17:34
2013.10.20
Как в трехзвенке передать файл с сервера приложений?


15-1367841718
O'ShinW
2013-05-06 16:01
2013.10.20
Чисто теоретический вопрос на запись в файл в начало со сдвигом


2-1358857187
O'ShinW
2013-01-22 16:19
2013.10.20
Копировать из одного документа MSWord в другой, без буфера обмена


2-1359545925
aka
2013-01-30 15:38
2013.10.20
Asm <--> машинный код





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский