procedure TCustomForm.CMShowingChanged(var Message: TLMessage);
begin
try
if Showing then
DoShow
else
DoHide;
except
if not HandleShowHideException then
raise;
end;
inherited CMShowingChanged(Message);
end;
procedure TCustomForm.UpdateShowing;
begin
if csLoading in ComponentState then exit;
{$IF defined(CHECK_POSITION) or defined(VerboseFormUpdateShowing) or defined(VerboseShowing)}
DebugLn(['[TCustomForm.UpdateShowing] START ',DbgSName(Self),' Pos=',Left,',',Top,' Visible=',Visible,' Showing=',Showing]);
{$ENDIF}
// If the form is about to show, calculate its metrics
if Visible and (not (csDestroying in ComponentState)) then
begin
if not (csDesigning in ComponentState) then
MoveToDefaultPosition;
if (fsFirstShow in FFormState) then
begin
Exclude(FFormState, fsFirstShow);
DoFirstShow;
end;
end;
{$IF defined(CHECK_POSITION) or defined(VerboseFormUpdateShowing) or defined(VerboseShowing)}
DebugLn(['[TCustomForm.UpdateShowing] calling inherited ',dbgsname(Self),' Pos=',Left,',',Top]);
{$ENDIF}
inherited UpdateShowing;
{$IF defined(CHECK_POSITION) or defined(VerboseFormUpdateShowing) or defined(VerboseShowing)}
DebugLn(['[TCustomForm.UpdateShowing] activating ',dbgsname(Self),' Pos=',Left,',',Top]);
{$ENDIF}
// activate focus if visible
if Showing and (not (csDestroying in ComponentState)) then
begin
if (not Assigned(ActiveControl)) and (not (csDesigning in ComponentState)) and (Parent=nil) then
begin
// automatically choose a control to focus
{$IFDEF VerboseFocus}
DebugLn('TCustomForm.CreateWnd ',DbgSName(Self),' Set ActiveControl := ',DbgSName(FindDefaultForActiveControl));
{$ENDIF}
ActiveControl := FindDefaultForActiveControl;
end;
if (Parent=nil) and Assigned(ActiveControl) and
ActiveControl.HandleAllocated and ActiveControl.CanFocus and
([csLoading, csDestroying, csDesigning] * ComponentState = []) then
begin
{$IFDEF VerboseFocus}
DebugLn('TCustomForm.CreateWnd A ',DbgSName(Self),' FActiveControl=',DbgSName(FActiveControl));
{$ENDIF}
LCLIntf.SetFocus(ActiveControl.Handle); // <==== Nach dieser Zeile hängt alles
end;
UpdateShowInTaskBar;
end;
end;
MacWomble hat geschrieben:In der Form3 gibt es eine Funktion BearbeiteForm3.
In dieser wird die Form3 createt und mit showmodal angezeigt sowie beim schließen wieder zerstört.
...
function BearbeiteAdresse(IDAdresse: integer; Neu: boolean): boolean;
var
Suchtext: string;
LastRec: integer;
F: TfrmAdresse;
begin
DoSave := False;
with dtmAdressen do
begin
F := TfrmAdresse.Create(nil);
F.memAdressNotiz.Text := qryAdresse.FieldByName('adr_notiz').AsString;
try
F.ShowModal;
if DoSave then
begin
if qryAdresse.State = dsEdit then
begin
qryAdresse.FieldByName('adr_notiz').AsString := F.memAdressNotiz.Text;
qryAdresse.ApplyUpdates;
end;
qryAdressListe.Refresh;
qryAdressListe.Locate('idadresse', qryAdresse.FieldByName('idadresse').AsInteger, []);
Result := True;
end
else
begin
qryAdresse.CancelUpdates;
Result := False;
end;
finally
FreeAndNil(F);
end;
end;
end;
{ TfrmAdresse }
procedure TfrmAdresse.btnSpeichernClick(Sender: TObject);
begin
DoSave := True;
Close;
end;
....
function BearbeiteAdresse(IDAdresse: integer; Neu: boolean): boolean;
var
Suchtext: string;
LastRec: integer;
F: TfrmAdresse;
begin
DoSave := False;
with dtmAdressen do
begin
F := TfrmAdresse.Create(nil);
F.memAdressNotiz.Text := qryAdresse.FieldByName('adr_notiz').AsString; // Das sollte eigentlich hinter dem "try" stehen. Was, wenn F nicht erzeugt werden konnte, also nil ist?
try
F.ShowModal;
if DoSave then
begin
if qryAdresse.State = dsEdit then // was wenn .State = dsInsert? Besser: "if qryAdresse.State in dsEditStates"
begin
qryAdresse.FieldByName('adr_notiz').AsString := F.memAdressNotiz.Text;
qryAdresse.Post; // <---- NEU
qryAdresse.ApplyUpdates;
end;
qryAdressListe.Refresh;
qryAdressListe.Locate('idadresse', qryAdresse.FieldByName('idadresse').AsInteger, []);
Result := True;
end
else
begin
qryAdresse.CancelUpdates; // wieso das denn? Du hast doch nichts geschrieben. Evtl. fehlt noch ein qryAdresse.Cancel.
Result := False;
end;
finally
FreeAndNil(F);
end;
end;
end;
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste