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.2k23 gold badges119 silver badges193 bronze badges
asked Oct 2, 2008 at 7:19
Toon KrijtheToon Krijthe
52.8k38 gold badges145 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.7k6 gold badges124 silver badges141 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
Update:
This question escalated to a new/related question which was fortunately solved by @RemyLebeau here.
So, instead of reading below, you should go directly to Major flaw — Radio buttons are not correctly set while the form is invisible
Thanks Remy
I have two form. When I click a radiobtn, I want to hide one form and show the second one.
Hide Form1 and show Form2:
procedure TForm1.RadioButton2Click(Sender: TObject);
begin
Form2.Visible:= TRUE;
Form1.Visible:= FALSE;
end;
In Form2 I press a button to ‘return’ to Form1:
procedure TForm2.Button1Click(Sender: TObject);
begin
Form1.RadioButton1.Checked:= TRUE;
Form1.Visible:= TRUE; <--- this will 'magically' put the RadioButton1 back to false
end;
However, I get this error when I try to make Form1 visible:
Project Tester.exe raised exception class EInvalidOperation with
message ‘Cannot change Visible in OnShow or OnHide’
Putting a breakpoint in RadioButton2Click I find out that RadioButton1 was magically rechecked during Form1.Visible:= TRUE (during TCustomForm.SetVisible more exactly).
Why is the RadioButton2 ‘magically’ checked during SetVisible?
unit Unit1;
INTERFACE
USES
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus, System.Actions, Vcl.ActnList, Vcl.StdCtrls;
TYPE
TForm1 = class(TForm)
GroupBox1: TGroupBox;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
procedure RadioButton2Click(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
private
public
end;
VAR
Form1: TForm1;
IMPLEMENTATION {$R *.dfm}
USES Unit2;
procedure TForm1.RadioButton1Click(Sender: TObject);
begin
Caption:= '1';
end;
procedure TForm1.RadioButton2Click(Sender: TObject);
begin
Caption:= '2';
Form2.Visible:= TRUE;
Form1.Visible:= FALSE;
end;
end.
—
unit Unit2;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
end;
VAR
Form2: TForm2;
IMPLEMENTATION {$R *.dfm}
USES Unit1;
procedure TForm2.Button1Click(Sender: TObject);
begin
Form1.RadioButton1.Checked:= TRUE;
Form1.Visible:= TRUE;
end;
end.
shade_ 1 / 1 / 0 Регистрация: 13.06.2014 Сообщений: 52 |
||||
1 |
||||
13.06.2015, 16:01. Показов 8975. Ответов 13 Метки нет (Все метки)
Пишу клавиатурный тренажёр, всё работает, но есть одна проблема, есть RadioGroup, в нём пользователь выбирает ввод символов, либо ввод текста, потом открывается другая форма, где собственно и будет вводится текст, всё работает и открывается, я обнуляю ItemIndex, для того что бы пользователь мог вернуться из формы с тренажёром к выбору задания, но выбивает ошибку Cannot change visible OnShow or OnHide,подскажите что я не правильно делаю?
0 |
251 / 162 / 24 Регистрация: 22.08.2014 Сообщений: 1,598 Записей в блоге: 1 |
|
13.06.2015, 17:11 |
2 |
OnShow or OnHide код покажи
sRadioGroup2.ItemIndex:=-1 можно над
Form7.Show; поставить.
1 |
1 / 1 / 0 Регистрация: 13.06.2014 Сообщений: 52 |
|
13.06.2015, 17:56 [ТС] |
3 |
planetoxod, код формы которая открываться должна? или код это формы? Form7.Show; идёт же и так вроде до обнуления RadioGroup.
0 |
251 / 162 / 24 Регистрация: 22.08.2014 Сообщений: 1,598 Записей в блоге: 1 |
|
13.06.2015, 18:53 |
4 |
Стоп строку поставь , где обнуляется, и F8 нажимай до ошибки, какая строка с ошибкой?
0 |
shade_ 1 / 1 / 0 Регистрация: 13.06.2014 Сообщений: 52 |
||||||||
13.06.2015, 22:26 [ТС] |
5 |
|||||||
planetoxod, ошибку не выдаёт, в том то и дело,что Form7 открывается, на форме все компоненты работают, а ошибка вылетает когда я опять хочу вернуться к Form4.
если убираю
то всё работает без проблем, почему ошибку выбивает когда я обнуляю RaioGroup я понять не могу.
0 |
Пишу на Delphi…иногда 1423 / 1278 / 286 Регистрация: 03.12.2012 Сообщений: 3,914 Записей в блоге: 5 |
|
13.06.2015, 22:31 |
6 |
когда я обнуляю RaioGroup обработчик OnClick у радиогруппы описан? Добавлено через 52 секунды
0 |
251 / 162 / 24 Регистрация: 22.08.2014 Сообщений: 1,598 Записей в блоге: 1 |
|
13.06.2015, 23:05 |
7 |
Я же прошу показать часть кода , где в строке происходит ошибка.
1 поставь стоп строку
1 |
shade_ 1 / 1 / 0 Регистрация: 13.06.2014 Сообщений: 52 |
||||
13.06.2015, 23:17 [ТС] |
8 |
|||
planetoxod, просто выводит сообщение, в строках ничего не показывает, как стоп строку ставить?
всё описано, по идее должно работать, но блин не работает
0 |
251 / 162 / 24 Регистрация: 22.08.2014 Сообщений: 1,598 Записей в блоге: 1 |
|
13.06.2015, 23:25 |
9 |
Сделай так
procedure TForm4.sRadioGroup2Click(Sender: TObject);
1 |
1 / 1 / 0 Регистрация: 13.06.2014 Сообщений: 52 |
|
14.06.2015, 00:08 [ТС] |
10 |
planetoxod, а зачем звёчдочки?, со звёчдочками компилятор ругается, без них та же ошибка
0 |
пофигист широкого профиля 4662 / 3096 / 850 Регистрация: 15.07.2013 Сообщений: 17,851 |
|
14.06.2015, 00:26 |
11 |
а зачем звёчдочки? Нет там никаких звездочек. Это глюк «цитатора». Заменяй их на пробелы.
1 |
1 / 1 / 0 Регистрация: 13.06.2014 Сообщений: 52 |
|
14.06.2015, 09:06 [ТС] |
12 |
northener, я так и сделал, всё равно такая же ошибка
0 |
Пишу на Delphi…иногда 1423 / 1278 / 286 Регистрация: 03.12.2012 Сообщений: 3,914 Записей в блоге: 5 |
|
14.06.2015, 12:20 |
13 |
Сообщение было отмечено shade_ как решение Решение
по идее должно работать, но блин не работает вот именно, что по идее, что происходит на самом деле: скрываем форму, меняем значение визуального объекта, которое вызывает обработчик OnClick (ссылка в моем сообщении, там же вариант, как бороться с этим), в котором производится попытка отрисовать изменения, а отрисовывать не на чем — форма невидима, по сему — или сначала «сбрасывать значение», затем скрывать форму или сделать так, как написано по ссылке в #6 а еще лучше пересмотреть алгоритм работы программы
1 |
1 / 1 / 0 Регистрация: 13.06.2014 Сообщений: 52 |
|
14.06.2015, 16:44 [ТС] |
14 |
cotseec, спасибо за разъснение ошикби, всё заработало
0 |
Ошибка после обновления с 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 КБ) Просмотров: 4040
Права пользователя
chat1.jpg (36.72 КБ) Просмотров: 4040
Здравствуйте.
Попробуйте заменить 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
Чат со мной
|
|
|
Пожалуйста, выделяйте текст программы тегом [с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 @ 05.03.05, 04:55 1) В TDisconnectForm.FormShow Project Disconnect.exe raised exception class EInvalidOperation with message Компилятор понятно написал, в чем ошибка. Visible формы можно поменять в OnCreate или в design-time. Добавлено 05.03.05, 05:08
procedure TForm1.FormCreate(Sender: TObject); begin Application.ShowMainForm := False; end; Сообщение отредактировано: s-mike — 05.03.05, 05:09 |
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; Теперь то работает? Добавлено 06.03.05, 08:46 |
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 @ 04.03.05, 17:42 У формы вообще то сть свойство Visible и Метод Hide… а если эта форма главная? тогда нужно делать так:
Application.ShowMainForm:=false; если я, конечно, не ошибаюсь |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Delphi: Общие вопросы
- Следующая тема
[ Script execution time: 0,0522 ] [ 16 queries used ] [ Generated: 9.06.23, 20:00 GMT ]