Вверх ↑
Этот топик читают: Гость
Ответов: 278
Рейтинг: 4
#1: 2015-08-03 00:35:46 ЛС | профиль | цитата
Привет всем!

В данной теме я бы хотел обсудить некоторые баги главной формы (hiMainForm).
Начнём по-порядку.

Суть: при TaskBar=true у дочерней формы - таскбар не появляется. Приходиться вызывать после OnCreate - doPlaceInTaskBar, что не очень то удобно делать каждый раз. После фикса можно будет убрать точку doPlaceInTaskBar за ненадобностью.

Пример:
Add(MainForm,2953706,483,224)
{
Width=353
Height=165
Visible=1
Caption="Main"
TaskBar=1
Point(doVisible)
Point(doPlaceInTaskBar)
Point(Handle)
Point(doFlashWindow)
link(onCreate,10456221:doAddTrayIcon,[(527,244)(527,341)(247,341)(247,384)])
AddHint(-13,-77,40,13,TaskBar)
}
Add(Button,4963424,56,448)
{
Left=170
Top=10
Width=150
Caption="doFlashWindow [Main]"
link(onClick,16758382:doTimer,[(360,454)(360,272)])
}
Add(ChildForm,7956862,406,364)
{
}
BEGIN_SDK
Add(EditMulti,8702682,21,21)
{
WorkCount=4
Width=433
Height=291
link(doWork1,8303767:doEvent,[(214,27)(214,230)])
link(doWork2,3969442:doPlaceInTaskBar,[(133,34)(133,118)])
link(doWork3,16184271:doWork1,[(122,41)])
link(doWork4,3969442:doShowModal,[(198,48)(198,139)])
}
Add(MainForm,3969442,245,84)
{
Left=35
Top=105
Width=177
Height=94
Visible=1
Caption="Modal"
BorderStyle=1
TaskBar=1
Position=0
Point(doPlaceInTaskBar)
Point(doVisible)
Point(Handle)
Point(doFlashWindow)
Point(doShowModal)
MakeExt(TaskBar,,TaskBar)
AddHint(108,-16,40,13,TaskBar)
}
Add(WinTools,5401680,245,168)
{
Point(isVisible)
link(Handle,3969442:Handle,[])
}
Add(IndexToChanel,8303767,245,224)
{
Point(Index)
link(onEvent1,16556683:doWork2,[])
link(onEvent2,16556683:doWork1,[(300,237)(300,223)])
link(Index,5401680:isVisible,[])
}
Add(ChanelToIndex,16556683,315,217)
{
link(onIndex,3969442:doVisible,[(359,223)(359,174)(233,174)(233,125)])
}
Add(InfoTip,4194561,322,42)
{
Info=#7:TaskBar|
Width=106
Height=81
}
Add(Button,630927,49,217)
{
Left=10
Top=10
Width=150
Height=40
Caption="doFlashWindow [Modal]"
link(onClick,16184271:doWork3,[(122,223)])
}
Add(HubEx,16184271,118,126)
{
link(onEvent,3659160:doTimer,[])
}
Add(Timer,3659160,147,126)
{
Interval=400
Enable=1
AutoStop=5
OverCall=1
Point(doTimer)
link(onTimer,3969442:doFlashWindow,[])
}
END_SDK
Add(TrayIcon,10456221,259,357)
{
Hint="Левой - Главная; Правой - Дочерняя"
Point(doAddTrayIcon)
link(onClick,3895459:doEvent,[])
}
Add(WinTools,2104096,483,294)
{
Point(isVisible)
link(Handle,2953706:Handle,[])
}
Add(IndexToChanel,10132576,483,357)
{
Point(Index)
link(onEvent1,11701800:doWork2,[])
link(onEvent2,11701800:doWork1,[(538,370)(538,356)])
link(Index,2104096:isVisible,[])
}
Add(ChanelToIndex,11701800,553,350)
{
link(onIndex,2953706:doVisible,[(603,356)(603,194)(471,194)(471,258)])
}
Add(IndexToChanel,3895459,301,357)
{
link(onEvent1,10132576:doEvent,[])
link(onEvent2,7956862:doWork1,[])
}
Add(InfoTip,9514806,413,105)
{
Info=#7:TaskBar|
Width=169
Height=81
}
Add(Button,14788684,56,504)
{
Left=170
Top=40
Width=150
Caption="doFlashWindow [Modal]"
link(onClick,7956862:doWork3,[(373,510)(373,384)])
}
Add(Button,14616364,56,651)
{
Left=15
Top=70
Width=305
Caption="doShowModal"
link(onClick,7956862:doWork4,[(386,657)(386,391)])
}
Add(Timer,16758382,413,266)
{
Interval=400
Enable=1
AutoStop=5
OverCall=1
Point(doTimer)
link(onTimer,2953706:doFlashWindow,[])
}
Add(Button,11065194,56,133)
{
Left=15
Top=10
Width=150
Caption="doSetTaskBar [Main]"
link(onClick,2953706:doPlaceInTaskBar,[(385,139)(385,265)])
}
Add(Button,16496250,56,189)
{
Left=15
Top=40
Width=150
Caption="doSetTaskBar [Modal]"
link(onClick,7956862:doWork2,[(373,195)(373,377)])
}

Фикс:
procedure THIMainForm.SetTaskBar;
begin
- //if IsMain then
- //if (Value = 1)and Assigned(Applet) then
- //Applet.ExStyle :={ Applet.ExStyle or} WS_EX_DLGMODALFRAME or WS_EX_TOOLWINDOW;

+ if IsMain then
+ begin
+ if (Value = 1)and Assigned(Applet) then
+ Applet.ExStyle :={ Applet.ExStyle or} WS_EX_DLGMODALFRAME or WS_EX_TOOLWINDOW;
+ end
+ else
+ begin
+ if (Value = 0) and Assigned(Applet) then
+ Control.ExStyle := Control.ExStyle or WS_EX_APPWINDOW;
+ end;
end;

P.S. У всех, у кого XP, прошу проверить код и подтвердить или опровергнуть этот баг.
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
файлы: 2code_36100.txt [3.3KB] [420], code_36101.txt [523B] [251]
vip
#1.1контекстная реклама от партнеров
Ответов: 2193
Рейтинг: 673
#2: 2015-08-03 01:26:22 ЛС | профиль | цитата
Vanchila писал(а):
У всех, у кого XP, прошу проверить код и подтвердить или опровергнуть этот баг.
Помог бы но не понял, как протестировать.
Vanchila писал(а):
при TaskBar=true у дочерней формы - таскбар не появляется
Так в схеме False.
Vanchila писал(а):
Приходиться вызывать после OnCreate - doPlaceInTaskBar
onCreate - это где?
Возможно кто и посообразительнее меня, но мне нужно разжевать:
1. Запускаем.
2. Нажимаем.
3. Получаем? (Да|Нет)
Как то так.
------------ Дoбавленo в 01.26:
XP SP3
1. Поставил в схеме дочерней форме TaskBar=true.
2. Запустил.
3. Вызвал дочернюю форму, нажатием правым кликом по трее.
4. На TaskBar НЕ добавилось.
Внес изменения в код hiMainForm. Повторил пункты 2 и 3. Добавилось на TaskBar.

P.S. Вот зачем эти минусы и плюсы в коде.
карма: 10

0
Ответов: 278
Рейтинг: 4
#3: 2015-08-03 01:54:43 ЛС | профиль | цитата
sla8a писал(а):
1. Поставил в схеме дочерней форме TaskBar=true.
2. Запустил.
3. Вызвал дочернюю форму, нажатием правым кликом по трее.
4. На TaskBar НЕ добавилось.
Внес изменения в код hiMainForm. Повторил пункты 2 и 3. Добавилось на TaskBar.
Да, всё верно.
Глюк был в том, что у дочерней формы не появлялся таскбар как при True, так и при False состоянии.

Ждём разработчиков. Требуется подтверждение на внесение изменений в репозиторий, и буду смотреть дальше.
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Разработчик
Ответов: 26061
Рейтинг: 2120
#4: 2015-08-03 03:45:17 ЛС | профиль | цитата
Vanchila писал(а):
Приходиться вызывать после OnCreate - doPlaceInTaskBar, что не очень то удобно делать каждый раз. После фикса можно будет убрать точку doPlaceInTaskBar за ненадобностью.

Если так было сделано, значит автор посчитал, что это наиболее правильно. С чего это взяли, что дочерняя форма должна по дефолту появляться в таскбаре, а если кому это не надо?
------------ Дoбавленo в 03.45:
Vanchila писал(а):
и буду смотреть дальше

Вот лучше посмотри дальше.
карма: 22

0
Ответов: 278
Рейтинг: 4
#5: 2015-08-03 04:15:38 ЛС | профиль | цитата
nesco писал(а):
Если так было сделано, значит автор посчитал, что это наиболее правильно
Так было сделано видимо потому, что не хотелось особо заморчачиваться с этим багом и нашелся более лёгкий путь - вывести точку doPlaceInTaskBar.

nesco писал(а):
С чего это взяли, что дочерняя форма должна по дефолту появляться в таскбаре
С того, что это такая же форма, как и родительская. В любой нормальной программе именно так всё и сделано: сколько бы не было дочерних форм - каждая из них имеет свой личный таскбар со своим капчионом.

nesco писал(а):
а если кому это не надо?
А если кому не надо, чтобы у дочерней формы был свой таскбар - тот поставит св-во TaskBar этой дочерней формы в false.

nesco писал(а):
Вот лучше посмотри дальше.
Смотреть дальше пока не могу, т.к. приходится по 2 раза объяснять проблему бага, именно БАГА, а не недочёта или недоработки.

1. Есть родительская форма.
2. У неё есть св-во TaskBar, которое принимает значение True или False.
3. При значении (по-умолчанию) True - таскбар этой родительской формы отображается; при значении False - не отображается.

1. Есть дочерняя форма.
2. У неё есть такое же св-во TaskBar, которое принимает такие же значения: True или False.
3. При значении (по-умолчанию) True - таскбар этой дочерней формы НЕ отображается; при значении false - не отображается.

Теперь вопрос к nesco, как к разработчику: согласен ли ты, что это баг?
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Разработчик
Ответов: 26061
Рейтинг: 2120
#6: 2015-08-03 10:04:32 ЛС | профиль | цитата
Vanchila писал(а):
согласен ли ты, что это баг?

Нет, не считаю. Возможно, что недоработка, но не баг. Ответь на вопрос -- зачем в коде фильтр по главной форме, это же сделано преднамеренно?
карма: 22

0
Ответов: 278
Рейтинг: 4
#7: 2015-08-03 18:32:11 ЛС | профиль | цитата
nesco писал(а):
зачем в коде фильтр по главной форме, это же сделано преднамеренно?
Наверное по той же причине, по которой отображаются 2 таскбара у главной формы при её TaskBar=True и подаче на точку doPlaceInTaskBar. Тоже, наверное, было сделано преднамеренно. А вообще, пробовал убрать фильтр - не заметил изменений. Немного даже озадачило.

nesco писал(а):
Возможно, что недоработка
Так тогда надо дорабатывать.

В любом случае, было бы неплохо, если бы мы не говорили за автора и не задавались вопросами по типу "зачем" да "почему", а автор сам бы объяснил аргументированно - почему именно так; почему у всех дочерних форм не работает св-во видимости в панели задач.
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Разработчик
Ответов: 26061
Рейтинг: 2120
#8: 2015-08-03 19:21:49 ЛС | профиль | цитата
Vanchila писал(а):
а автор сам бы объяснил аргументированно

До автора сейчас уже и не достучишься
карма: 22

0
Ответов: 1924
Рейтинг: 172
#9: 2015-08-03 20:26:06 ЛС | профиль | цитата
Vanchila писал(а):
Суть: при TaskBar=true у дочерней формы - таскбар не появляется. Приходиться вызывать после OnCreate - doPlaceInTaskBar, что не очень то удобно делать каждый раз. После фикса можно будет убрать точку doPlaceInTaskBar за ненадобностью.

В принципе, согласен. Есть свойство - оно должно работать. Или надо написать в ini, что действует только для главной формы (как точка onClose). Вообще, название mainform для дочерней формы - неверное, да и слишком много отличий. К сожалению, это уже не исправить, т.к. среда не дорабатывается (а такое только в компонентах не сделать).
карма: 9
0
Ответов: 278
Рейтинг: 4
#10: 2015-08-03 21:42:40 ЛС | профиль | цитата
3042 писал(а):
Вообще, название mainform для дочерней формы
Так может в таком случае вообще разделить форму на главную и дочернюю?
------------ Дoбавленo в 21.42:
nesco писал(а):
До автора сейчас уже и не достучишься
Значит нужно самим как-то пробовать разобраться, раз такие дела.

Вообще, не должен помешать фильтр на дочернюю, предложенный мною. И если потом будут какие глюки (которых я пока не замечаю), то всегда можно будет исправить обратно, не так ли?
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
10
Сообщение
...
Прикрепленные файлы
(файлы не залиты)