Здравствуйте! Имею следующую проблему:
Поверх основной формы выравнивается прозрачная форма на которой лежит TTreeView, у TTreeViewItem есть стиль который предусматривает кнопку по нажатию на которую из дерева будет удалятся лист,
если я нажимаю на кнопку закрыть(крестик что справа, сама кнопка в стиле представлена обычным TButton), то удаляется текущий айтем и все что в него вложены, код кнопки удаления:
procedure ButtonCloseClick(Sender: TObject);
var
ItemSelected:TTreeViewItem;
begin
if TreeView1.Selected<>nil then
begin
if TreeView1.Selected.ParentItem<>nil then begin
ItemSelected:=TreeView1.Selected;
TreeView1.Selected.ParentItem.RemoveObject(ItemSelected);
ItemSelected.DisposeOf;
end else
begin
ItemSelected:=TreeView1.Selected;
TreeView1.RemoveObject(ItemSelected);
ItemSelected.DisposeOf;
end;
end;
end;
После того как я нажимаю на кнопку удаления один или более раз, я не могу получить доступ к основной форме над которой висит прозрачная форма, всё это очень похоже на DeadLock, но это не DeadLock, потому что если я кликну в любое другое место за пределами формы, например открою "Проводник", а затем кликну на основную форму, то та получает фокус и всё снова работает. Сделал небольшой костыль который иногда срабатывает, он имитирует клик по форме, что даёт ей фокус, но не всегда работает:
Вопрос
Winexcel
Здравствуйте! Имею следующую проблему:
Поверх основной формы выравнивается прозрачная форма на которой лежит TTreeView, у TTreeViewItem есть стиль который предусматривает кнопку по нажатию на которую из дерева будет удалятся лист,
если я нажимаю на кнопку закрыть(крестик что справа, сама кнопка в стиле представлена обычным TButton), то удаляется текущий айтем и все что в него вложены, код кнопки удаления:
procedure ButtonCloseClick(Sender: TObject); var ItemSelected:TTreeViewItem; begin if TreeView1.Selected<>nil then begin if TreeView1.Selected.ParentItem<>nil then begin ItemSelected:=TreeView1.Selected; TreeView1.Selected.ParentItem.RemoveObject(ItemSelected); ItemSelected.DisposeOf; end else begin ItemSelected:=TreeView1.Selected; TreeView1.RemoveObject(ItemSelected); ItemSelected.DisposeOf; end; end; end;
После того как я нажимаю на кнопку удаления один или более раз, я не могу получить доступ к основной форме над которой висит прозрачная форма, всё это очень похоже на DeadLock, но это не DeadLock, потому что если я кликну в любое другое место за пределами формы, например открою "Проводник", а затем кликну на основную форму, то та получает фокус и всё снова работает. Сделал небольшой костыль который иногда срабатывает, он имитирует клик по форме, что даёт ей фокус, но не всегда работает:
procedure ClickOnControl(HWND:THandle; xPos,yPos:word); begin PostMessage(HWND,WM_LBUTTONDOWN,0,(yPos shl 16)+xPos); PostMessage(HWND,WM_LBUTTONUP,0,(yPos shl 16)+xPos); end;
Из прозрачной формы посылаю клик когда она закрывается:
ClickOnControl(FMXHandleToHWND(FormMain.Handle), Round(Point.X+10), Round(Point.Y+10));
Пробовал вызывать FormMain.Activate, не помогло.
Посоветуйте пожалуйста как вернуть фокус форме при таких обстоятельствах.
Изменено пользователем WinexcelСсылка на комментарий
0 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.