screen.onactivecontrolchange

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
Antworten
arturx
Beiträge: 140
Registriert: Fr 21. Nov 2008, 11:29
OS, Lazarus, FPC: Winux (L 1.0.6.xy FPC 2.6.z)
CPU-Target: 32/64Bit

screen.onactivecontrolchange

Beitrag von arturx »

Lazarus 9.26 Beta

das Event screen.onactivecontrolchange wird nicht gefeuert,
wenn der Focus von einem wincontrol zum nächsten geht.
Lediglich beim Öffnen und Schließen eines Formulars wird es aufgerufen...

(Unter Delphi funktioniert das problemlos)

Muss unter Lazarus evt. noch eine Eigenschaft gesetzt werden oder ist das ganz einfach ein Fehler von Lazarus ?

Beisp:

Code: Alles auswählen

procedure  txyz.dosomething(sender : tobject);
begin // dosomething wird nicht aufgerufen
     beep;
end;
//.....
 
constructor txyz.create;
begin screen.onactivecontrolchange := @dosomething;
end;


Es scheint tatsächlich ein Lazarus Bug zu sein.
Wenn analog zu Delphi die letzte Zeile in
customform.inc : tcustomform.setfocusedcontrol geändert wird,
funktionierts : s.u.:
 

Code: Alles auswählen

 
function TCustomForm.SetFocusedControl(Control: TWinControl): Boolean;
var
  ParentForm: TCustomForm;
  CurControl: TWinControl;
begin
  Result := False;
  if (Control<>nil)
  and (csDestroying in Control.ComponentState) then exit;
 
  if (Parent<>nil) then begin
    // delegate to topmost form
    ParentForm:=GetParentForm(Self);
    if ParentForm<>nil then
      ParentForm.SetFocusedControl(Control);
    exit;
  end;
 
  // update FActiveControl
  if (FDesigner = nil) and (not (csLoading in ComponentState)) then
  begin
    if Control <> Self then
      FActiveControl := Control
    else
      FActiveControl := nil;
  end;
 
  // update Screen object
  Screen.FActiveControl := Control;
  if Control<>nil then begin
    Screen.FActiveCustomForm := Self;
    Screen.MoveFormToFocusFront(Self);
    if Self is TForm then
      Screen.FActiveForm := TForm(Self)
    else
      Screen.FActiveForm := nil;
 
 [b] screen.UpdateLastActive; [/b]// <--- added analog  Delphi !!
  end;
Zuletzt geändert von monta am Di 20. Jan 2009, 16:50, insgesamt 4-mal geändert.
Grund: Codetags, Verschoben

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: screen.onactivecontrolchange

Beitrag von pluto »

Hallo, nutze doch bitte zum Formatieren die Code Tags. dann kann man den Soruce-Code besser lesen.
MFG
Michael Springwald

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: screen.onactivecontrolchange

Beitrag von marcov »

Das hoert sich als ein Bug an. Das Vernueftigste ist diese in mantis.freepascal.org einzutragen, mit alle Informationen, und vielleicht ein Patch fuers LCL.

Antworten