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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2011, 17:54   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
Смущение AV при TwinControl.GetHandle

Всем привет!

Возникла проблема с до боли простым кодом:
Код:
function HLR_MsgBox(MsgText: string; MsgBoxType: Cardinal): Integer;
begin
  Result := MessageBox(MainForm.Handle, PAnsiChar(MsgText), PAnsiChar(RsMsgBoxCaption), MsgBoxType);
end;
При некоторых случаях у юзеров выпадет такой баг:
Код:
exception class   : EAccessViolation
exception message : Access violation at address 004D96AF in module 'HLR.exe'. Read of address 00000180.

main thread ($bb8):
004d96af +003 HLR.exe      Controls              TWinControl.HandleNeeded
004d96d5 +005 HLR.exe      Controls              TWinControl.GetHandle
005d9946 +036 HLR.exe      GlobalStrings 166  +1 HLR_MsgBox
0061a2c8 +11c HLR.exe      HLR            97 +18 initialization
76c833c8 +010 kernel32.dll                       BaseThreadInitThunk
Почему он выпадает? Потому что MainForm.Handle не существует? Надо указывать Application.Handle? Ранее указывал 0, но появлялась кнопка на таскбаре..
Человек_Борща вне форума Ответить с цитированием
Старый 04.05.2011, 18:23   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

100 лет примерно так же использую в Д7, только первый параметр= 0 и ни каках проблем
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.05.2011, 18:29   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Нуль - это рабочий стол, и по-томому у меня на панели задач при каждом месадже боксе вылазила новая кнопка - это не есть хорошо(Не люблю когда там +100500 кнопок). Решение нашёл. Указывать Application.Handle.

А так все мессаджбоксы будут привязаны к твоему хэндлу и не будут рисовать новых кнопок.

Вопрос решился. Всем спасибо.
Человек_Борща вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрытие панелей инструментов при открытии и отображение при закрытии документа Василий. Microsoft Office Word 0 23.10.2010 00:41
Сохранение изображения TWinControl в файл Oburec Общие вопросы Delphi 0 09.05.2010 00:48
прозрачный twincontrol. БулатМастер Помощь студентам 1 28.02.2010 17:41
Метод TWinControl отвечающий за "удочерение" SunKnight Компоненты Delphi 4 10.11.2009 21:55
создание dll при старте приложения и удаление при завершении TyoshA Общие вопросы Delphi 7 13.07.2009 13:56