Страница 1 из 3

Загадка про TabBar (с картинками)

Добавлено: 06 Декабрь 2017, 17:19
Игорь Столяров
Привет всем !

Хочу предложить к рассмотрению небольшой конфуз.
Потребуется Clarion 10 (любой) и желание при запуске приложения сразу открыть в нём MDI окно.
А потом, из меню AppFrame, ещё 2 раза открыть это же окно (я буду нумеровать окна в порядке запуска).

1. Сначала просто запускаем AppFrame и 3 раза открываем через меню MDI окно.
Получаем вполне ожидаемый и корректный TabBar:
2.jpg
2.jpg (8.28 КБ) 2477 просмотров

2. Теперь для AppFarme добавляем в "Window Events -> Open Window" запуск MDI окна.
После запуска приложения всё верно: открыто "ОКНО № 1".
3.jpg
3.jpg (5.85 КБ) 2472 просмотра

Открываем еще 2 копии окна из меню AppFrame и получаем непонятное:
1.jpg
1.jpg (9.15 КБ) 2477 просмотров

Глюк стабильный, наблюдать его можно на любых окнах, при условии, что есть открытие MDI окна при запуске приложения. :(
Почему так происходит ? И как открыть MDI окно при запуске приложения, что бы потом не нарушался порядок закладок в TabBar ?

Загадка про TabBar (с картинками)

Добавлено: 06 Декабрь 2017, 17:37
finsoftrz
Попробовать поставить sleep между стартами. В c6 помогало, в c10 как-то хуже было, подробно не тестировал, просто заметил. То есть нужна пауза, чтобы запущенный поток отработал. Причем с TabBar это не связано.

Загадка про TabBar (с картинками)

Добавлено: 06 Декабрь 2017, 17:45
Игорь Столяров
Дело в том, что порядок окон правильный.
Если посмотреть STD(STD:WindowList) для AppFrame, то в нём по любому всё верно:
4.jpg
4.jpg (6.82 КБ) 2463 просмотра

Задержки и паузы здесь не спасают, то что Вы описали - это решение проблемы запуска приложения
на дохлом компьютере, когда открытие MDI окна при запуске заканчивается GPF ...
(на самом деле надо просто проверять Status(AppFrame) перед запуском MDI окна)

Тут, что-то происходит именно с TabBar ... толи он как-то инициируется ACCEPT, то ли он просто по жизни такой ... :(

Загадка про TabBar (с картинками)

Добавлено: 07 Декабрь 2017, 0:25
finsoftrz
У меня несколько другая ситуация. Я не использую TabBar и список окон в меню (последний, к слову, некорректно работает в c6 при большом количестве открытых окон). Вместо этого свой менеджер окон, который более функционален. Но проблема при автоматическом запуске нескольких mdi окон при входе в программу точно есть. Что-то не успевает инициализироваться. У меня проявляется несколько иначе. Давно хотел повнимательнее посмотреть, как-то все руки не доходят...

Загадка про TabBar (с картинками)

Добавлено: 07 Декабрь 2017, 10:44
kreator
Попробовал тест у себя. Из десяти попыток только один раз проявилась такая хрень. И то только после переключения на другую программу. Может должны быть какие-то спец. условия? Странно. Заменил прямой start на post, вообще перестало проявляться.

Загадка про TabBar (с картинками)

Добавлено: 07 Декабрь 2017, 10:49
Игорь Столяров
kreator писал(а): 07 Декабрь 2017, 10:44 Заменил прямой start на post, вообще перестало проявляться.
Я пробовал в Event:OpenWindow использовать POST(Event:Accepted,?ItemStartMDI) ... без результата.

Напишите пожалуйста какой оператор для запуска MDI окна Вы используете и его точку вставки.
Может быть я что-то не то вообще делаю ... :( Заранее спасибо !

Загадка про TabBar (с картинками)

Добавлено: 07 Декабрь 2017, 11:02
kreator
Вот так как-то:

Код: Выделить всё

  system{prop:CharSet} = Charset:Cyrillic
  system{prop:FontCharSet + prop:TipsFont} = Charset:Cyrillic
  system{prop:Font} = 'Arial'
  ! End of "Before Opening the Window"
  OPEN(AppFrame)
  WindowOpened=True
  ! Start of "After Opening the Window"
  ! [Priority 4000]
  0{PROP:StatusText,1} = GETINI('DATABASE','GIBASE','','.\STARTRAP.INI')
  !START(MONITOR, 25000)
  post(EVENT:ACCEPTED, ?Регистрациялицензий)
Мне кажется, происходит какое-то событие, которое приводит к ломке порядка. Но вот какое? Меня смущает нестабильность проявления проблемы. У меня.

Загадка про TabBar (с картинками)

Добавлено: 07 Декабрь 2017, 11:23
Игорь Столяров
Спасибо ! Попробовал Ваш вариант - у меня проблема стабильна ... :(
Ну не бывает же чудес ... Можно попросить Вас показать заголовок Вашего окна AppFrame ? Что-то вроде:

Код: Выделить всё

AppFrame   APPLICATION('Главное меню'),AT(,,510,292),FONT('Arial',11,,,CHARSET:CYRILLIC),RESIZE,CENTER, |
                  ICON('prilavok.ico'),IMM,MASK,MAX,STATUS(-1,100,150),SYSTEM
                       MENUBAR,USE(?Menubar)
                         MENU('&Файл'),USE(?File)
Заранее спасибо !

Загадка про TabBar (с картинками)

Добавлено: 07 Декабрь 2017, 11:53
kreator

Код: Выделить всё

AppFrame             APPLICATION('Администрирование "************"'),AT(,,520,400),FONT('MS Sans Serif',8,COLOR:Black, |
  FONT:regular,CHARSET:CYRILLIC),RESIZE,TILED,AUTO,ICON('SUPPORT.ICO'),IMM,MAX,STATUS(-1,80, |
  120,45),SYSTEM
                       MENUBAR,USE(?MENUBAR1)
                         ITEM('&Выход'),USE(?Выход),STD(STD:Close)
                         ITEM('&Настройки'),USE(?Настройки)
                         ITEM('&Управление доступом'),USE(?Доступ)
                         MENU('Управление сервером'),USE(?Управлениесервером)
                           ITEM('&Монитор лицензий'),USE(?Регистрациялицензий)
                           ITEM,USE(?SEPARATOR1),SEPARATOR
                           ITEM('Загрузка скриптов'),USE(?УправлениесерверомЗагрузкаскриптов),DISABLE
                           ITEM,USE(?SEPARATOR2),SEPARATOR
                           ITEM('&Обнуление версий'),USE(?УправлениесерверомОбнулениеверсий)
                         END
                         MENU('Просмотр базы'),USE(?Просмотрбазы),HIDE
                         END
                         MENU('&Окно'),USE(?Окно),MSG('Arrange multiple open windows'),STD(STD:WindowList)
                           ITEM('T&ile'),USE(?Tile),MSG('Arrange multiple opened windows'),STD(STD:TileWindow)
                           ITEM('&Cascade'),USE(?Cascade),MSG('Arrange multiple opened windows'),STD(STD:CascadeWindow)
                           ITEM('&Arrange Icons'),USE(?Arrange),MSG('Arrange the icons for minimized windows'),STD(STD:ArrangeIcons)
                         END
                       END
                       TOOLBAR,AT(0,0,520,20),USE(?TOOLBAR1)
                         BUTTON,AT(6,3,16,15),USE(?Button4),ICON('EXIT.ico'),FLAT,SKIP,STD(STD:Close)
                         BUTTON,AT(27,3,16,15),USE(?Button3),ICON('TOOLS.ico'),FLAT,SKIP,TIP('Настройки')
                         REGION,AT(0,0,,1),USE(?Region1),FULL,BEVEL(-1)
                         BUTTON,AT(47,3,16,15),USE(?ROLI),ICON('key.ico'),FLAT,SKIP,TIP('Управление доступом')
                         BUTTON,AT(67,3,16,15),USE(?Button1),ICON('Search.ico'),FLAT,SKIP,TIP('Монитор лицензий')
                       END
У меня атрибута MASK нет. Но, думаю, он не причём. Вообще мой кусок на легаси. Хотите, могу другую прогу на ABC проверить? Просто, у этой MDI Tab задействованы. А то, что есть на ABC, нужно их подключать (в принципе - не проблема).

Загадка про TabBar (с картинками)

Добавлено: 07 Декабрь 2017, 11:59
Игорь Столяров
Подставил Ваш заголовок AppFrame - у меня всё без изменений .... :(
Насчёт Legacy ничего сказать не могу - уже забыл как оно выглядит ... :)
Если есть возможность - проверьте пожалуйста на ABC.

Загадка про TabBar (с картинками)

Добавлено: 07 Декабрь 2017, 12:03
kreator
А может дадите тестовую App, где это проявляется?

Загадка про TabBar (с картинками)

Добавлено: 07 Декабрь 2017, 12:09
Игорь Столяров
Я работаю с боевой программой .... OK ! Сделаю тестовый проект и выложу. :)

Загадка про TabBar (с картинками)

Добавлено: 07 Декабрь 2017, 12:36
Yufil
Пока стартует новый тред, может случиться событие на окне старого треда (обычно Event:Timer), что потребует переключения тредов и весьма чревато падением программы. При необходимости прикрываю окно заглушкой, из которой и запускаю задачу, примерно так...

Код: Выделить всё

Wait   WINDOW(''),AT(-100,-100,1,1),timer(500) 
       END

OPEN(Wait)
Display() 
Accept 
   CASE Event()
   OF  Event:OpenWindow
       Start(....) 
   OF Event:Timer 
      Break 
End 
Close(Wait)

Загадка про TabBar (с картинками)

Добавлено: 07 Декабрь 2017, 12:55
kreator
В АБЦ'шной проге тоже не удаётся увидеть проблему. А mdi-окна должны быть одни и те же?

Загадка про TabBar (с картинками)

Добавлено: 07 Декабрь 2017, 13:04
Игорь Столяров
Мистика .... Окна могут быть любые. Я для простоты использовал одно окно.