Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка на handle / 22 сообщений из 22, страница 1 из 1
27.03.2018, 13:35
    #39621154
apexplsql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка на handle
Код: pascal
1.
2.
3.
Sleep(1);
    if IsWindowVisible(Application.Handle) then
    ShowWindow(Application.Handle, SW_HIDE);


Подчеркивается handle и ошибка E2003 Undeclared identifier: 'Handle' Как убрать её?
...
Рейтинг: 0 / 0
27.03.2018, 13:38
    #39621156
Квейд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка на handle
apexplsql
Код: pascal
1.
2.
3.
Sleep(1);
    if IsWindowVisible(Application.Handle) then
    ShowWindow(Application.Handle, SW_HIDE);


Подчеркивается handle и ошибка E2003 Undeclared identifier: 'Handle' Как убрать её?

не использовать необъявленный идентификатор
...
Рейтинг: 0 / 0
27.03.2018, 13:45
    #39621164
apexplsql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка на handle
Квейд,
Handle это идентификатор, мне просто надо скрыть знаек из панель задач.
Везде написано что надо так это делать но у меня handle все время подчеркивается
...
Рейтинг: 0 / 0
27.03.2018, 13:50
    #39621168
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка на handle
apexplsqlКвейд,
Handle это идентификатор, мне просто надо скрыть знаек из панель задач.
Везде написано что надо так это делать но у меня handle все время подчеркивается
Application какого типа переменная?
...
Рейтинг: 0 / 0
27.03.2018, 13:50
    #39621169
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка на handle
apexplsqlВезде написано что надо так это делать но у меня handle все время подчеркивается
Консольное приложение?
...
Рейтинг: 0 / 0
27.03.2018, 13:51
    #39621170
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка на handle
apexplsql,

Uses Forms есть?
...
Рейтинг: 0 / 0
27.03.2018, 13:53
    #39621173
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка на handle
apexplsql,

Кстати, есть сомнения в правильности IsWindowVisible(Application.Handle). Может лучше Application.MainForm.Handle?
...
Рейтинг: 0 / 0
27.03.2018, 13:54
    #39621174
apexplsql
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка на handle
wadman,
Да, просто консоль
...
Рейтинг: 0 / 0
27.03.2018, 13:55
    #39621176
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка на handle
DarkMasterКстати, есть сомнения в правильности IsWindowVisible(Application.Handle). Может лучше Application.MainForm.Handle?

Зависит от версии Delphi и состояния MainFormOnTaskbar.

Попытка скопировать код без его понимания в очередной раз родит говнокод.
...
Рейтинг: 0 / 0
27.03.2018, 13:57
    #39621178
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка на handle
apexplsqlwadman,
Да, просто консоль

Ну и какой Application у консоли?-) Не, можно конечно и зайца научить курить, но зачем?
...
Рейтинг: 0 / 0
27.03.2018, 13:59
    #39621180
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка на handle
apexplsqlДа, просто консоль

Окно для консольного приложения показывает не само приложение, а система. Откуда следует, что значком на панели задач невозможно манипулировать изменяя объекты приложения.

В отличие от консольного, GUI-приложение свои окна создаёт само, поэтому имеет полный контроль над ними - включая значок на панели задач.

Однако, вызывающий консольного приложения может указать параметры его запуска. В т.ч. безоконный режим.
...
Рейтинг: 0 / 0
27.03.2018, 14:00
    #39621181
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка на handle
DarkMasterесть сомнения в правильности IsWindowVisible(Application.Handle)
авторProvides access to the window handle of the main form (window) of the application.
Думаешь, отличаются?
...
Рейтинг: 0 / 0
27.03.2018, 14:03
    #39621182
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка на handle
wadmanDarkMasterесть сомнения в правильности IsWindowVisible(Application.Handle)
авторProvides access to the window handle of the main form (window) of the application.
Думаешь, отличаются?

А вот не помню - что-то в голове крутится,а вспомнить не могу - склероз :(
...
Рейтинг: 0 / 0
27.03.2018, 14:18
    #39621203
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка на handle
Конечно, отличаются.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
procedure TApplication.CreateHandle;
// ...
begin
  if not FHandleCreated and not IsConsole then
  begin
    // ...
    FObjectInstance := MakeObjectInstance(WndProc);
    LHandle := CreateWindowEx(WS_EX_TOOLWINDOW, WindowClass.lpszClassName, (FTitle),
      WS_POPUP or WS_CAPTION or WS_CLIPSIBLINGS or WS_SYSMENU
      or WS_MINIMIZEBOX,
      GetSystemMetrics(SM_CXSCREEN) div 2,
      GetSystemMetrics(SM_CYSCREEN) div 2,
      0, 0, 0, 0, HInstance, nil);
    FHandle := LHandle;
    FHandleCreated := True;
    SetWindowLong(FHandle, GWL_WNDPROC, LPARAM(FObjectInstance));
    // ...
  end;
end;



Это отдельное окно, которое создаётся всегда (да, даже если MainFormOnTaskBar = True).

авторProvides access to the window handle of the main form (window) of the application.

Это явная ложь. Она появилась из-за попытки объяснить неочевидное устройство окон в старых версиях Delphi простыми словами. И до сих пор никто документацию не поправил. Смысл этих слов: если вам нужно окно-родитель (кнопка на панели задач) в старых версиях Delphi (или в новых, но с MainFormOnTaskBar = False) - то берите Application.Handle, это корень иерархии.
...
Рейтинг: 0 / 0
27.03.2018, 14:22
    #39621213
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка на handle
Немного истории от разработчиков Delphi: https://stackoverflow.com/questions/2204804/delphi-what-is-application-handle
...
Рейтинг: 0 / 0
27.03.2018, 15:35
    #39621277
Салями
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка на handle
Никогда не понимал что же именно делает MakeObjectInstance(), хотя читал много и медленно вдумчиво.
А главное - зачем оно это делает? Делать как делают все WinAPI программы нельзя было почему-то?
...
Рейтинг: 0 / 0
27.03.2018, 15:48
    #39621291
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка на handle
Салямихотя читал много и медленно вдумчиво.
Вроде прозрачно написано:
This can be particularly useful when using classes that do not have a Windows handle but need to receive Windows Messages.
...
Рейтинг: 0 / 0
27.03.2018, 15:49
    #39621293
Квейд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка на handle
СалямиНикогда не понимал что же именно делает MakeObjectInstance()Делает метод класса оконной процедурой, которую может вызывать Windows
...
Рейтинг: 0 / 0
27.03.2018, 16:03
    #39621304
Салями
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка на handle
не... Оно вроде как делает какой-то некий динамический код, который получается regular procedure, и просто вызывает заданный метод конкретного захардкоденного экземпляра класса.
А я не понял ни механику данного действа, ни нафига так извыворачиваться... В других библиотеках вроде ж таких финтов не проворачивают, и всё ок.
...
Рейтинг: 0 / 0
27.03.2018, 16:10
    #39621317
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка на handle
Салями, я могу ошибаться, но предполагаю, что было желание не использовать доступные в WinAPI user-параметры (типа GWL_USERDATA и т.п.), оставляя их свободными для внешнего кода.
...
Рейтинг: 0 / 0
27.03.2018, 16:26
    #39621348
Салями
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка на handle
гм... Всё может быть... Но обычно все спокойно используют GWL_USERDATA, и сабклассингу это не мешает, вроде наоборот даже упрощает.
А если зачем-то сильно нужно не трогать GWL_USERDATA - есть второй вариант: SetProp(). С которым в VCL вроде как тоже малость перемудрили: https://habrahabr.ru/post/217189/
...
Рейтинг: 0 / 0
27.03.2018, 16:50
    #39621394
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка на handle
Салями,
делало ...

сделано это было что бы натянуть безобразие из WinAPI на объектную модель, тогда ещё в винде не было поддержки сабклассинга
кроме того, это быстрее чем любые словари


авторuser-параметры (типа GWL_USERDATA и т.п.), оставляя их свободными для внешнего кодаЭто не сильно мешает, в tagWNDCLASSEX есть информация сколько экземпляр окна потребляет байт под свои нужды. Для корректного "наследовании" и использовании готового класса эту информацию нужно учитывать, а не лупить сразу по [GWL_USERDATA].
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка на handle / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]