При закрытии дочерних окон главное окно деактивируется и уходит на задний план. Если имеются открытые окна других программ, оно прячется за ними, что создает огромные неудобства.
Что это такое и как с этим бороться?
Компиляция win64, ОС Семёрка.
Модератор: Модераторы
врядли. Возможно это глюк взаимодействия с пользователем.Я думаю это глюк LCL.
версия лазаря и фпс какая?Компиляция win64, ОС Семёрка.
Снег Север писал(а):В конце концов плюнул на попытки разобраться в причине и вставил именно ручное выставление окна в топ.
как бы хм... попытка брить "под корень"?Так подыми его MainForm.Focused:=true;
pupsik писал(а):версия лазаря и фпс какая?
pupsik писал(а):как бы хм... попытка брить "под корень"?
установить пакеты - это сверхсложные способы? А вот залезть в сорцы лазаря и оттдебажить баг - весьма просто и по времени займёт пяток минут (в принципе может повезти)?Тем более, что все эти сверхсложные способы
pupsik писал(а):установить пакеты - это сверхсложные способы?
procedure TCustomForm.SetFocus;
procedure RaiseCannotFocus;
var
s: String;
begin
s:='[TCustomForm.SetFocus] '+Name+':'+ClassName+' '+rsCanNotFocus;
{$IFDEF VerboseFocus}
RaiseGDBException(s);
{$ELSE}
raise EInvalidOperation.Create(s);
{$ENDIF}
end;
begin
{$IFDEF VerboseFocus}
DebugLn('TCustomForm.SetFocus ',Name,':',ClassName,' ActiveControl=',DbgSName(ActiveControl));
{$ENDIF}
if not FActive then
begin
if not (IsControlVisible and Enabled) then
RaiseCannotFocus;
SetWindowFocus; //смотрим что это!
end;
end;
procedure TCustomForm.SetWindowFocus;
var
NewFocusControl: TWinControl;
begin
if [csLoading,csDestroying]*ComponentState<>[] then exit;
if Assigned(FActiveControl) and not Assigned(FDesigner) then
NewFocusControl := ActiveControl
else
NewFocusControl := Self;
{$IFDEF VerboseFocus}
DebugLn('TCustomForm.SetWindowFocus ',Name,':',Classname ,
' NewFocusControl=',NewFocusControl.Name,':',NewFocusControl.ClassName,
' HndAlloc=',dbgs(NewFocusControl.HandleAllocated));
{$ENDIF}
if not NewFocusControl.HandleAllocated or
not NewFocusControl.CanFocus then
exit;
//DebugLn(['TCustomForm.SetWindowFocus ',DbgSName(Self),' NewFocusControl',DbgSName(NewFocusControl)]);
LCLIntf.SetFocus(NewFocusControl.Handle); // а теперь это!
if GetFocus = NewFocusControl.Handle then
NewFocusControl.Perform(CM_UIACTIVATE, 0, 0); // судя по всему, это сообщение посылается для перерисовки окон
end;
function SetFocus(hWnd: HWND): HWND; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
procedure TCustomForm.Hide;
begin
Visible := False;
end;
....
property Visible stored VisibleIsStored default false;
....
function TCustomForm.VisibleIsStored: boolean;
begin
Result := Visible;
end;
procedure TObject.Free;
begin
// the call via self avoids a warning
if self<>nil then
self.destroy;
end;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5