I have a very strange problem with the Delphi 2006 IDE.
If the IDE is minimized, and the PC is locked. I return to the pc, unlock it and maximize the IDE, I sometimes get the error «Cannot change Visible in OnShow or OnHide».
If this happens, I have to kill the IDE with the taskmanager.
Is there anybody out there who has the same problem? And if possible a solution?
I suspect that some third party components are involved, but my coworkers never experience this error.
Jim McKeeth
38.2k24 gold badges120 silver badges194 bronze badges
asked Oct 2, 2008 at 7:19
Toon KrijtheToon Krijthe
52.9k38 gold badges146 silver badges202 bronze badges
0
Yes I have noticed the same problem when using Terminal Servers. I use GExperts. If you can reproduce the problem you should report it on http://qc.codegear.com/
answered Oct 2, 2008 at 10:46
Lars TruijensLars Truijens
42.8k6 gold badges127 silver badges143 bronze badges
4
Is this connected to a specific form / forms that you have open at the moment?
If not, then it’s probably not a 3rd party component that causes problems, but an expert you have added to the Delphi. Try disabling all experts. If that solves the problem, add them back one by one.
answered Oct 2, 2008 at 7:47
1
Other way with no need to kill IDE in Taskmanager is to display Taskbar settings and turn off «show above other windows». Use this setting, click OK on IDE err. msg and then set it back. With some practice it could be usefull by time…
Btw: colleague’s IDE layout setting is «classic undocked» and he never had this problem.
But something like bugfix is still missing :/
(WinXP, TurboDelphi 2006)
answered Jan 27, 2009 at 8:34
Ошибка после обновления с 7.0 на 7.1 Cannot change Visible in OnShow or OnHide
Tim
Чт окт 18, 2018 5:39 pm
Чт окт 18, 2018 5:39 pm
#31909
На части клиентских машин после обновления с версии 7.0 на 7.1 при запуске программы вылетает ошибка «Cannot change Visible in OnShow or OnHide»
на 70% клиентов всё ок
Сответственно чат не стартует и выдаёт сообщения пока не завершишь процесс в диспетчере задач.
Старые Win 7 и свежие Win 10 со всеми апдейтами — закономерности сходу найти не удалось
скрины и логи отправил на почту
Вложения
Под Администратором
chat2.jpg (76.78 КБ) Просмотров: 4060
Права пользователя
chat1.jpg (36.72 КБ) Просмотров: 4060
Здравствуйте.
Попробуйте заменить mcclient.exe на проблемных местах. Ссылку на закачку я выслал вам почтой.
Team lead
Чат со мной
Tim
Пт окт 19, 2018 2:20 pm
Пт окт 19, 2018 2:20 pm
#31915
Файл заменили:
WIN7: При запуске файла от имени администратора ошибки не происходит, чат начинает работать нормально. Если же файл, открытый ранее от имени администратора, закрыть и открыть в обычном режиме — проблема возвращается .
WIN10: После замены файла проблема сохранилась, ошибка та же
логи отправил почтой
Права администратора тут не при чём, если вы запускаете программу от имени другого пользователя — он просто создаст новый профиль.
Смотрю логи.
Team lead
Чат со мной
Я не знаю, с чем может быть связана эта ошибка. Свяжитесь со мной чатом, попробую посмотреть удалённо.
Team lead
Чат со мной
Tim
Пт окт 19, 2018 4:46 pm
Пт окт 19, 2018 4:46 pm
#31922
Спасибо за подсказку!
Методом тыка оказалось что помогает очистка папки db — после переподключения всё заработало на 9 из 10 проблемных компах. Причем logs.db потом без проблем можно вернуть, вместе с историей
Последний буду мучить в пн, если не получится — свяжусь
В общем-то не за что
Team lead
Чат со мной
Вроде нашли причину проблемы. Поправили, на будущее.
Team lead
Чат со мной
delphidelphi-7
i am using Delphi 7. When the system times out, or if your computer goes to sleep and then comes back up the system gives an error: » Cannot change Visible in OnShow or OnHide.» Can you please say general reasons for this error
Best Solution
The reason that this error occurs is most likely that you show or hide a control in response to its OnShow or OnHide event. The solution is to change your code so that you no longer try to change the visibility of a control at such an event.
Related Solutions
Delphi – Error “Cannot change Visible in OnShow or OnHide” in Delphi IDE
Yes I have noticed the same problem when using Terminal Servers. I use GExperts. If you can reproduce the problem you should report it on http://qc.codegear.com/
Delphi onshow main form / modal form
One commonly used option is to post yourself a message in the form’s OnShow. Like this:
const
WM_SHOWMYOTHERFORM = WM_USER + 0;
type
TMyMainForm = class(TForm)
procedure FormShow(Sender: TObject);
protected
procedure WMShowMyOtherForm(var Message: TMessage); message WM_SHOWMYOTHERFORM;
end;
...
procedure TMyMainForm.FormShow(Sender: TObject);
begin
PostMessage(Handle, WM_SHOWMYOTHERFORM, 0, 0);
end;
procedure TMyMainForm.WMShowMyOtherForm(var Message: TMessage);
begin
inherited;
with TMyOtherForm.Create(nil) do begin
try
ShowModal;
finally
Free;
end;
end;
end;
|
|
|
|
Пожалуйста, выделяйте текст программы тегом [сode=pas] … [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как «свернуть» программу в трей.
3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
… (продолжение следует) …
Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка — 60 дней. Последующие попытки бан.
Мат в разделе — бан на три месяца…
Как спрятать форму?
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
|
|
Senior Member Рейтинг (т): 4 |
Надо спрятать форму + добавить иконку в трей. type TDisconnectForm = class(TForm) procedure Ic(n:Integer;Icon:TIcon); procedure FormShow(Sender: TObject); protected procedure IconMouse(var Msg: TMessage); message WM_USER + 1; procedure ControlWindow(var Msg: TMessage); message WM_SYSCOMMAND; // WM_SYSCOMMAND = $0112; end; var DisconnectForm: TDisconnectForm; Time:Integer; implementation uses WarningFormU; {$R *.dfm} procedure TDisconnectForm.FormShow(Sender: TObject); var sTime:string; begin sTime:=Paramstr(1); try {Проверка полученных данных} //Time:=strtoint(stime); Time:=2; except ShowMessage(‘Ошибка в параметре’); Close; application.Terminate; exit; end; if (time<=0) then begin ShowMessage(‘Не положительное число’); Close; application.Terminate; exit; end; //Праметр задан верно — включаем таймер Inc(time); ic(1,application.Icon); showwindow(handle, SW_hide); showwindow(Application.handle, SW_HIDE); { В DRKB написано что так можно спрятать форму Но она не прячеться — она остаеться видимой } Timer1.Enabled:=true; end; procedure Tdisconnectform.ControlWindow(var Msg: TMessage); begin if (Msg.WParam = SC_MINIMIZE) then begin Ic(1, Application.Icon); showwindow(Handle, SW_hide); //showwindow(Application.handle, SW_HIDE); end else inherited; end; Procedure TDisconnectForm.Ic(n:Integer;Icon:TIcon); Var Nim:TNotifyIconData; begin With Nim do Begin cbSize:=SizeOf(Nim); Wnd:=disconnectform.Handle; uID:=1; uFlags:= NIF_MESSAGE or NIF_ICON or NIF_TIP; hicon:=Icon.Handle; uCallbackMessage:=WM_USER+1; szTip:=’Tip’ End; Case n OF 1: Shell_NotifyIcon(NIM_ADD,@Nim); // 2: Shell_NotifyIcon(NIM_DELETE,@Nim); // 3: Shell_NotifyIcon(NIM_MODIFY,@Nim); // End; end; procedure Tdisconnectform.IconMouse(var msg:Tmessage); var p: tpoint; begin GetCursorPos(p); if (Msg.LParam = WM_RBUTTONUP) then begin PopupMenu1.Popup(p.X,p.Y); PostMessage(Handle, WM_NULL, 0, 0); end; end; Как спрятать форму? |
|
SPrograMMer |
|
|
У формы вообще то сть свойство Visible и Метод Hide… |
|
s-mike |
|
|
Хм, а где Application.Minimize? |
|
мыш |
|
|
также если хочешь чтобы приложение загрузилось сразу без формы, можно написать application.showmainform:=false в файле проекта |
|
Delphist |
|
|
Senior Member Рейтинг (т): 4 |
Цитата У формы есть свойство Visible Цитата Хм, а где Application.Minimize? I)Пробуем Visible:=false 1) В TDisconnectForm.FormShow Project Disconnect.exe raised exception class EInvalidOperation with message
2) В TDisconnectForm.FormCreate II)Пробуем Application.Minimize 1) В TDisconnectForm.FormShow 2) В TDisconnectForm.FormCreate III)Пробуем Application.Minimize; Visible:=false; 1) В TDisconnectForm.FormShow 2) В TDisconnectForm.FormCreate |
|
s-mike |
|
|
Цитата Delphist @ 1) В TDisconnectForm.FormShow Project Disconnect.exe raised exception class EInvalidOperation with message Компилятор понятно написал, в чем ошибка. Visible формы можно поменять в OnCreate или в design-time. Добавлено procedure TForm1.FormCreate(Sender: TObject); begin Application.ShowMainForm := False; end; Сообщение отредактировано: s-mike — |
|
Delphist |
|
|
Senior Member Рейтинг (т): 4 |
Цитата s-mike
Только для главной формы нужно делать так: Сделал, но TDisconnectForm.FormShow — так как форма не появляеться, ic(1,application.Icon); showwindow(handle, SW_hide); showwindow(Application.handle, SW_HIDE);
не выполняеться => прога в трей не прячеться. Цитата Надо спрятать форму + добавить иконку в трей. |
|
SPrograMMer |
|
|
Давай сделаем маааааленький эксперимент. procedure TForm1.Button10OnClick(Sender:TObject); Begin HideToSysTray; // прячемся Form1.Visible:=False End; О результатх скажи. |
|
Delphist |
|
|
Senior Member Рейтинг (т): 4 |
2 SPrograMMer |
|
Kanes |
|
|
Delphist, Цитата Но надо чтобы форма сама пряталась ( без моего вмешательства )
Поясни, не понемаю какая разница |
|
Delphist |
|
|
Senior Member Рейтинг (т): 4 |
Поясняю Форму можно спрятать так: procedure TForm1.Button1Click begin Visible:=false; end; (Форма прячеться по нажатию на кнопку — после моих действий) Можно спрятать так: procedure TForm1.FormShow begin Visible:=false; end; (Такой трюк не пройдет, но тем не менее — форму прячет сама прога) |
|
SPrograMMer |
|
|
Delphist Я знал что после щелчка будет все работать, я просто хотел тебе маааленькую вещь показать — как мне кажется, по крайне мере я так делал когда-то, форма сразу после загрузки ДОЛЖНА показаться, а затем — прячем её. Я имею ввиду то что б можно бвло применить Form1.Visible:=False
Нужно что б в этот момент форма была видима. Соответственно кидаем на форму таймер, установив ему интервал поменьше, можно 10 мс — тогда эффект может быть такой, что как форма отрисовалась и спраталясь, не будет заметно человеческому глазу. Procedure TForm1.Timer1Timer(Sender:TObject); Begin Timer1.Enabled:=False; // что б больше не реагировал HideToSysTray; // прячемся в трей End; Теперь то работает? Добавлено |
|
RPC-13 |
|
|
не самый подходящий способ, но.. =) в OnCreate гл. формы: сохрани в переменные — положение, длину и ширину формы form1.top:=3000; form1.left:=3000; или form1.Top:=0; form1.Left:=0; form1.Width:=0; form1.Height:=0 в нужный момент присвой форме те переменные которые сохранил. |
|
Delphist |
|
|
Senior Member Рейтинг (т): 4 |
Цитата Теперь то работает?
Работает. Цитата не будет заметно человеческому глазу.
Заметно. 2 SPrograMMer,s-mike,мыш: |
|
miksayer |
|
|
Цитата SPrograMMer @ У формы вообще то сть свойство Visible и Метод Hide… а если эта форма главная? тогда нужно делать так: Application.ShowMainForm:=false; если я, конечно, не ошибаюсь |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Delphi: Общие вопросы
- Следующая тема
[ Script execution time: 0,1288 ] [ 16 queries used ] [ Generated: 21.09.23, 09:07 GMT ]
| Автор | Сообщение |
|---|---|
|
Заголовок сообщения: Ошибка из-за обновления библиотеки
|
|
|
|
D2010 В моем проекте есть таблица в которой при нажатии кнопки в ячейке (EditButtons) появляется всплывающее окошко, сделанное по аналогии с примером Demo1 Grid2 столбец VendorName. Так вот все работало, но начиная с версии 5,6 возникает ошибка со след. текстом «Cannot change Visible in OnShow or OnHide» причем эта ошибка возникает только при попытке изменить значение во вновь вставленной записи. Т.е.на старых записях без проблем, но вот если вставить новую запись внести какие-либо значения в соседние ячейки, а потом нажать EditButtons возникает ошибка. С чем это связано ? Повторюсь на старых версиях библиотеки этого не было. |
| Вернуться наверх |
|
|
Administrator |
Заголовок сообщения: Re: Ошибка из-за обновления библиотеки
|
||
|
Добрый день. В описании ошибки написано, что вы пытаетесь изменить свойство Visible в событии OnShow or OnHide. _________________ |
||
| Вернуться наверх |
|
||
|
Alesandr |
Заголовок сообщения: Re: Ошибка из-за обновления библиотеки
|
|
|
Значит проблему решил. Может кому пригодится было: переделал на: |
| Вернуться наверх |
|






????? 