AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Form nur einmal anzeigbar

Ein Thema von Barret · begonnen am 22. Jan 2005 · letzter Beitrag vom 22. Jan 2005
Antwort Antwort
Benutzerbild von Barret
Barret

Registriert seit: 27. Mai 2004
53 Beiträge
 
#1

Form nur einmal anzeigbar

  Alt 22. Jan 2005, 11:21
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).
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Form nur einmal anzeigbar

  Alt 22. Jan 2005, 11:26
wie schließt du das Formular wieder? hoffentlich doch mit "modalresult :="?
und das
DoubleBuffered := false; macht im onClose auch keinen Sinn. Wenn das Form nicht sichtbar ist stört das Doublebuffered doch nicht.

(wenn du anstelle der "Code"-Tags das "Delphi-Code" Tag nimmst werden die schlüsselworte etc. auch fett dargestellt etc. - eben wie in der ide)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#3

Re: Form nur einmal anzeigbar

  Alt 22. Jan 2005, 11:28
Schmeiss mal alles raus was du bei Onshow oder OnHide so hast. den ich glaube die größe andern wenn er die form anzeigt mag er nicht.
Außerdem würde ich die DoubeleBufferung ein beihalten wenn du sie schon brauchst.

PS: HAst du schon versucht schrit für schritt zu debuggen ???
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Benutzerbild von Barret
Barret

Registriert seit: 27. Mai 2004
53 Beiträge
 
#4

Re: Form nur einmal anzeigbar

  Alt 22. Jan 2005, 11:29
Im OnClose Ereigniss hab ich nur zu stehen:
Code:
procedure TFFVConfig.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  DoubleBuffered := false;
  TblConfig.Close; //schliesen der Datanbank
end;

"schrit für schritt zu debuggen": hab ich schon gemacht. Der Debugger zeigt mir den Fehler in der OnShow zeile direkt an. OnHide hab ich nichts nur OnShow...Aber wo sollte ich das dan mit reinschreiben wenn nicht da??? Weil es ja beim ersten mal funktioniert.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Form nur einmal anzeigbar

  Alt 22. Jan 2005, 11:59
wie du das form schließt hast du aber immer noch nicht geschrieben. Wie schon gesagt solltest du das ganze auch nicht im onShow machen. Machs einfach ins OnCreate oder führe es einfach aus bevor du showmodal aufrufst. Zum beispiel so:
Delphi-Quellcode:
procedure TFFVConfig.Execute;
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

  ShowModal;
end;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#6

Re: Form nur einmal anzeigbar

  Alt 22. Jan 2005, 12:42
Delphi-Quellcode:
var
  FFVConfig: TFFVConfig;
  iOK_Abbrum_Zustand : Integer = 1; //Definieren der ausgelösten Aktion im Menue (OK & Abbrechen)

implementation
Ich habe mir deinen Code nicht weiter als bis dort angesehen. Du verwendest 2 globale Variablen. -> Seeehr unsauber.
Beide Instanzen der FormKlasse greifen darüber auf die gleichen Objekte zu. Es ist also wahrscheinlich, dass es deshlab bei dir knallt.
Mein Tipp ist:
Schmeiße immer alle globalen Variablen raus, die der Form designer anlegt.
Um in der projekt datei Trotzdem ein Hauptformular setzen zu können reicht das:
Delphi-Quellcode:
var
  PlaceHolder :TObject;
begin
  ...
  Application.Createform(TDeineFormKlasse, PlaceHolder);
  ...
end;
Die Variablen werden nur beim Anlegen der Form Unit gesetzt und danach nicht wieder neu angelegt.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz