Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2014, 13:40   #11
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

При
Код:
Form_ZZZ.Visible:=true;
сначала отработает Form_ZZZ.onActivate, а уж затем процедура InitVars. Но при этом у меня она уже центруется))).

Последний раз редактировалось Iron Monk; 25.11.2014 в 13:44.
Iron Monk вне форума Ответить с цитированием
Старый 25.11.2014, 15:01   #12
exyl
Пользователь
 
Регистрация: 15.11.2014
Сообщений: 75
По умолчанию

Цитата:
Ты видимо не понимаешь сам механизм визуальных форм )
Обьяснять наверное не стану, просто еще раз намекну на совет Аватара.
Может быть и не понимаю. Но после InitVars идет только Application.Run
Ты же не хочешь меня убедить, что при run происходит центровка и наступают события OnCreate и OnShow?

Iron Monk, дело не в центровке, а в значениях, которые не хотят заносится в структуру. При этом проверил в созданном с нуля проекте - все заносится. Запускал отладку по шагам - все отрабатывает, но координаты формы все равно по нулям вплоть до Application.Run. В общем понятно, что проект спроектирован неверно, но мне он достался от другого программиста вместе с его увольнением. Рефакторинг небольшой я уже сделал, но копать глубоко нет времени, так что я сразу после создания темы написал простейшую функцию, смысл которой сводится к операции:
Код:
Form_ZZZ.Left:=(ScrRect.Width-Wnd.Width) div 2;
, где ScrRect.Width - это ширина экрана пользователя, а Wnd.Width - ширина окна приложения. Для высоты тоже самое.

Последний раз редактировалось exyl; 25.11.2014 в 15:33.
exyl вне форума Ответить с цитированием
Старый 25.11.2014, 15:22   #13
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Цитата:
Сообщение от exyl Посмотреть сообщение
Может быть и не понимаю. Но после InitVars идет только Application.Run
Ты же не хочешь меня убедить, что при run происходит центровка и наступают события OnCreate и OnShow?
Посмотри кино, если самому лень разбираться:
Вложения
Тип файла: rar Project.rar (192.6 Кб, 8 просмотров)

Последний раз редактировалось Iron Monk; 25.11.2014 в 16:08.
Iron Monk вне форума Ответить с цитированием
Старый 25.11.2014, 15:50   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Ты же не хочешь меня убедить, что при run происходит центровка и наступают события OnCreate и OnShow?
Неа. Зачем убеждать того, кому уже все понятно без слов.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.11.2014, 15:55   #15
exyl
Пользователь
 
Регистрация: 15.11.2014
Сообщений: 75
По умолчанию

Цитата:
Сообщение от Iron Monk Посмотреть сообщение
Посмотри кино, если самому лень разбираться:
Мне не лень. Я пытаюсь докопаться до истины, потому что не люблю костыли, которые могут превратиться в грабли.
Выше я уже отписался, что если создать новый проект, то все заносится. Где косяк в проекте, я найти не могу. Тот человек, от кого мне это досталось, очень враждебно ко мне настроен и не собирается мне что-либо рассказывать. Код местами труднопонимаем, без комментариев (в хорошем коде они и не нужны, кстати, но это совсем не тот случай). Документации нет. Некоторые глобальные переменные имеют названия типа X1, gh9 и т.п. Человек это делал очень лениво и местами для одних и тех же целей используются глобальные переменные с разными названиями. Но уволен он был даже не за корявый код с костылями, сотворенный в рамках его специфического понимания парадигм ООП, даже когда это шло вразрез со здравым смыслом (хотя как по мне, так за одно это можно), а за систематическое несоблюдение временных рамок при ранее составленном в его присутствии и оговоренном заранее плане.

И еще, я не запускаю незнакомые приложения от незнакомых дяденек с форумов. Если сможешь дать код или кратко объяснить - было бы замечательно.

Цитата:
Неа. Зачем убеждать того, кому уже все понятно без слов.
Ну тут двояко можно понять в свете того, что я написал:
Цитата:
проект спроектирован неверно
.
Или действительно в Run что-то есть того, что я не увидел сразу? Код смотрел:
Код:
procedure TApplication.Run;
begin
  FRunning := True;
  try
    AddExitProc(DoneApplication);
    if FMainForm <> nil then
    begin
      case CmdShow of
        SW_SHOWMINNOACTIVE: FMainForm.FWindowState := wsMinimized;
        SW_SHOWMAXIMIZED: MainForm.WindowState := wsMaximized;
      end;
      if FShowMainForm then
        if (FMainForm.FWindowState = wsMinimized) or (InitialMainFormState = wsMinimized) then
        begin
          Minimize;
          if (InitialMainFormState = wsMinimized) then
            FMainForm.Show;
        end else
          FMainForm.Visible := True;
      repeat
        try
          HandleMessage;
        except
          HandleException(Self);
        end;
      until Terminated;
    end;
  finally
    FRunning := False;
  end;
end;
Придраться не к чему, объяснить откуда после него появляются Left и Top не могу.

Последний раз редактировалось exyl; 25.11.2014 в 16:03.
exyl вне форума Ответить с цитированием
Старый 25.11.2014, 16:02   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не люблю костыли, которые могут превратиться в грабли.
Не очень понимаю какие костыли ты ожидаешь от координат формы...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.11.2014, 16:18   #17
exyl
Пользователь
 
Регистрация: 15.11.2014
Сообщений: 75
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Не очень понимаю какие костыли ты ожидаешь от координат формы...
Сверху отредактировал сообщение немного, глянь.

По поводу граблей. Есть переопределенная процедура:
Код:
procedure TForm_ZZZ.WMMOUSEWHEEL(var Msg: TMessage);
В ней, сразу после инхерайтед идет строка:
Код:
if WindowFromPoint(Mouse.CursorPos)<>ScrollBox_appZZZ.Handle then Exit;
Так прикол в том, что скролл не работает на скролл боксе в верхнем левом углу экрана, размером точно со всю форму Form_ZZZ при старте. При этом нет контролов, которые бы загораживали доступ к скролл боксу (в скролл боксе только имэйдж, но он не ТВинКонтрол, чтоб быть окном в понимании этой процедуры). Ты это объяснить смогешь? Я пока нет. У меня пока даже догадки нет, как это можно пофиксить.
exyl вне форума Ответить с цитированием
Старый 25.11.2014, 17:20   #18
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
объяснить откуда после него появляются Left и Top не могу.
И не сможешь, пока генофонд Делфи не перероешь на предмет взаимодействия этих свойств.
Цитата:
Ты это объяснить смогешь?
Не. Не смогу. Я же не видел всего проекта. Могу только гадать.
Допустим что из TForm_ZZZ.WMMOUSEWHEEL не возвращается результат, поэтому сообщение до скролла не доходит.
Честно признаюсь не понимаю зачем этот обработчик вообще нужно было мутить. Автор явно с башней не дружит.
Эх... У TMessage кажись есть поле Result. Попробуй оперировать им. Я правда не помню как именно, почитай в хелпе. Не исключено что именно невозврат значения все портит.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.11.2014, 20:25   #19
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Application.Run->HandleMessage и делает всю магию.

в ваш обработчик заходит при скролинге на скролбоксе?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 25.11.2014 в 20:33.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.11.2014, 21:38   #20
exyl
Пользователь
 
Регистрация: 15.11.2014
Сообщений: 75
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Не. Не смогу. Я же не видел всего проекта.
И не приведи Бог... Там 21 модуль и в некоторых более 30тыс строк. А какая там каша из переменных... Местами смотришь и думаешь, как оно вообще может стабильно работать? А уж что-то менять, то только с бэкапом - иначе черт его знает, что там откажется работать при следующем запуске после компиляции.

Цитата:
Честно признаюсь не понимаю зачем этот обработчик вообще нужно было мутить.
Капитанэ намекает, что для отлова движения колесика мыши над контролом. Буду благодарен, если подскажешь более правильный способ.

Цитата:
в ваш обработчик заходит при скролинге на скролбоксе?
Благодарю за уважительное обращение, но давай на "ты", мне подчиненных на работе хватает, которые выкают, а разница в возрасте даже если и в два раза, то я тут как неофициальное лицо, так что буду наравне со студентами, тем более знаний по делфи у меня не так много, как щас требуется.
Ответ на вопрос: нет, не заходит в той области, что я указал.
exyl вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при запуске формы ввода на MAC OS Hoochara Microsoft Office Excel 4 14.07.2012 15:52
Проблема при запуске формы в Delphi Dissembler7 Помощь студентам 1 19.04.2012 08:00
Ошибка при запуске динамической формы Orchestroman Общие вопросы Delphi 4 24.03.2012 23:51
Изменение разрешения при запуске формы artemavd Общие вопросы Delphi 2 16.07.2009 18:48
Координаты формы при различном разрешении экрана Fataller Помощь студентам 13 28.03.2009 10:51