Hi!
Ich hab da ein Problem mit ner Form. undzwar kann ich diese nur einmal öffnen. Beim zweiten mal heut er mir immer einem Fehler raus: "ElnvalidException: Eigenschaft Viseble kann in OnShow oder OnHide nicht verändert werden." Ich seh den Fehler aber nich. Die Form wird normal in ShowModal aufgerufen. Ich setz zwar ein paar Viseble zustände aber wenn man die doppelt setzt sollte das eigentlich nichts machen. An sonsten für ich nur an einer oder zwei stellen FormShow(self) aus. Auch diese Sache sollte im normalfall aber keine Probleme darstellen.
ich setz den code mal rein (unwichtige proceduren sind nicht enthalten (berechnungen laden von datein ...)):
Code:
var
FFVConfig: TFFVConfig;
iOK_Abbrum_Zustand : Integer = 1; //Definieren der ausgelösten Aktion im Menue (OK & Abbrechen)
implementation
{$R *.dfm}
//verwendete Dateien & Biblioteken ---------------------------------------------
uses IniFiles, UFVMain, UFVConfigTableload;
//Schliesen der Form -----------------------------------------------------------
procedure TFFVConfig.FormClose(Sender: TObject; var Action: TCloseAction);
begin
TblConfig.Close; //schliesen der Datanbank
DoubleBuffered := false;
end;
//Anzeigen der Form ------------------------------------------------------------
procedure TFFVConfig.FormShow(Sender: TObject);
begin
TblConfig.Open; //Datenbank öffnen
//darstellungs Angaben
Height := 150;
Width := 296;
Position := poMainFormCenter;
GroupBoxEinstellungen.Visible := false;
GroupBoxPassWdaendern.Visible := false;
GroupBoxPasswort.Visible := true;
Tableshow;
MenueOption.Visible := true;
MenueNeu.Visible := false;
ResetComp(FFVConfig);
iOK_Abbrum_Zustand := 1; //Steuerung für das Startmenue
end;
//OK-Button in Passwortabfrage -------------------------------------------------
procedure TFFVConfig.BtnPassWdOKClick(Sender: TObject);
begin
if (EdtPassWd.Text = TblConfig.FieldByName('PASSWD').AsString) then
begin
GroupBoxEinstellungen.Visible := true;
GroupBoxPasswort.Visible := false;
GroupBoxPassWdaendern.Visible := false;
iOK_Abbrum_Zustand := 2;
Height := 600;
Width := 800;
Left := FFVMain.left;
Top := FFVMain.Top;
end
else
begin
EdtPassWd.Clear;
EdtPassWd.SetFocus;
end;
end;
//Passwort ändern --------------------------------------------------------------
procedure TFFVConfig.MenuePasswortClick(Sender: TObject);
begin
Height := 190;
Width := 296;
GroupBoxEinstellungen.Visible := false;
GroupBoxPasswort.Visible := false;
GroupBoxPassWdaendern.Visible := true;
MenueNeu.Visible := true;
MenueOption.Visible := false;
EdtPassWdaendern1.SetFocus;
iOK_Abbrum_Zustand := 3;
end;
//Abbrechen-Button in Passwort ändern ------------------------------------------
procedure TFFVConfig.BtnPassWdaendernAbbrechenClick(Sender: TObject);
begin
FormShow(Self);
EdtPassWd.SetFocus;
end;
//OK-Button im Startmenue ------------------------------------------------------
procedure TFFVConfig.MenueOKClick(Sender: TObject);
begin
if (iOK_Abbrum_Zustand = 1) then
begin
BtnPassWdOK.Click;
Exit; //ohne := BtnOK.Click
end;
if (iOK_Abbrum_Zustand = 2) then BtnConfigOK.Click;
if (iOK_Abbrum_Zustand = 3) then BtnPassWdaendernOK.Click;
end;
//Abbrechen-Button im Startmenue -----------------------------------------------
procedure TFFVConfig.MenueAbbrechenClick(Sender: TObject);
begin
if (iOK_Abbrum_Zustand = 1) then BtnPassWdAbbrechen.Click;
if (iOK_Abbrum_Zustand = 2) then BtnConfigAbbrechen.Click;
if (iOK_Abbrum_Zustand = 3) then BtnPassWdaendernAbbrechen.Click;
end;
end.
das is jetz alles wo cih irgendwas grafisches ändere.
Wenn die Form geöffnet wird sie doppelt gebuffert (erkärung im onClose).