AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Form Automatsch öffnen, wenn ein User es möchte!
Thema durchsuchen
Ansicht
Themen-Optionen

Form Automatsch öffnen, wenn ein User es möchte!

Ein Thema von m-werk · begonnen am 17. Jun 2002 · letzter Beitrag vom 21. Jun 2002
Antwort Antwort
Seite 1 von 3  1 23      
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#1

Form Automatsch öffnen, wenn ein User es möchte!

  Alt 17. Jun 2002, 22:11
Hi Leute, so nun hab ich ein Problem beseitigt, schon ist das nächste da. Dies ist aber (glaub ich jedenfalls) das letzte, was ich noch habe.

Ich habe folgendes vor.
Ich habe eine Form (ExtraForm) wo ich die Geburtstagskinder sehe, die von heute an bis hin in einer Woche, Geburtstag haben.
Das mit dem Filtern von den Geburtstagskindern funktioniert einwandfrei.

Folgendes. Ich habe in der ExtraForm eine Checkbox eingebaut. Wenn ein User diese Checkbox aktiviert, dann öffnet sich die Form automatisch beim start. Wenn er sie nicht aktiviert, kann er über einen Button auf die form Zugreifen.

Der Wert von der checkbox wird in eine INI-Datei geschrieben

So sieht der code in der Hautpform aus:
Im Puplic Teil meiner Hauptform habe ich folgenden code:

Code:
public
     { Public-Deklarationen }
  procedure save_inifile;
  procedure load_inifile;
  end;
Weiters stehen die save_inifile und die load_inifile auch in der Hauptform:

Code:
procedure TKundendaten.save_inifile;
begin
  try
    Ini:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'settings.ini' );
    Ini.WriteBool('Sektion1','check_box',ExtraForm.CheckBox1.Checked);
  finally
    Ini.Free;
  end;
end;
Code:
procedure TKundendaten.load_inifile;
begin
  try
    Ini:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'settings.ini' );
    ExtraForm.CheckBox1.Checked:=ini.ReadBool('Sektion1','check_box', true)
  finally
    Ini.Free;
  end;
end;
Und
Code:
procedure TKundendaten.FormShow(Sender: TObject);
begin
  load_inifile;
  if ExtraForm.CheckBox1.Checked Then Geburtsdatum.Click;
end;
In der ExtraForm habe ich folgendes in die Procedure von der Checkbox stehen:

Code:
procedure TExtraForm.CheckBox1Click(Sender: TObject);
begin
  Kundendaten.save_inifile;
end;
Soweit sogut. Wenn ich die Checkbox aktiviere, bekomme ich folgende Fehlermeldung:
Zugriffsverletzung bei Adresse 00383638. Lesen von Adresse 00383638

Was kann ich da noch machen?
PS: Ich muß bei der Hautpform beim FormShow auf die Geburtstag.Click gehen, da dieser Button einen code zum filtern beinhaltet.
Ich hab auch schon probiert anstelle von FormShow diese Procedure bei onActivate auszuführen, aber da habe ich eine andere fehlermelung. Diese ist mit onShow weg.

Kann mir jemand helfen?
Grüße, m-werk
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2
  Alt 17. Jun 2002, 22:42
Rufst du load_inifile noch wo anders auf?

Schau mal im Menü Projekt - Optionen... im Register "Formulare" nach, auf welcher Seite sich dein ExtraForm befindet. Wenn es rechts ist, dann schiebe es nach links.
  Mit Zitat antworten Zitat
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#3
  Alt 17. Jun 2002, 22:45
Hi, die procedure load_inifile rufe ich sonst niergenst auf und ExtraForm ist auf der rechten Seite
Grüße, m-werk
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#4
  Alt 17. Jun 2002, 22:46
Hi,

schreib die Tini.Create, vor das try

Grüsse, Daniel
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5
  Alt 17. Jun 2002, 22:48
Zitat von m-werk:
... und ExtraForm ist auf der rechten Seite
Da haben wir das Problem. Da ExtraForm auf der Seite der "verfügbaren Formulare" ist, wird es beim Start nicht erzeugt. Dadurch zeigt die Variable (Zeiger) ExtraForm ins leere und ein Zugriff auf ExtraForm.CheckBox1 erzeugt eine Schutzverletzung. Du musst ExtraForm zu den Formularen hinzufügen, die Automatisch erzeugt werden.
  Mit Zitat antworten Zitat
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#6
  Alt 17. Jun 2002, 22:48
Hab ich gemacht, nützt aber nichts!

Noch was ist mir aufgefallen:

Normalerweise schreibt man das ja so:

Code:
Procedure TKundendaten.load_inifile;
var
Ini: TIniFile;
begin
............
end;
Ich bekomme, wenn ich die Variable TIniFile so schreibe bei beiden Codes folgenden hinweis:

[Warnung] Hauptmenue.pas(431): Variable 'Ini' ist möglicherweise nicht initialisiert worden

Ich hab dann das so gemacht:
Code:
......
var
  Ini: TIniFile;
  Kundendaten: TKundendaten;

implementation
.......
Kann es daran liegen? (Ich glaube nicht)
Grüße, m-werk
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7
  Alt 17. Jun 2002, 22:59
Dazu: Schau dir einmal das Posting von Daniel B an, da steht, was du machen musst, um diesen Hinweis zu "beseitigen".

Zu deinem Problem:
Setze mal den Cursor in die Zeile mit
ExtraForm.CheckBox1.Checked:=ini.ReadBool('Sektion 1','check_box', true)
und drücke dann [F4]. Dein Programm müsste nach dem Starten nun an dieser Stelle anhalten. Sollte die Fehlermeldung aber davor erscheinen, dann liegt der Fehler wo anders.
Gehe nun mit der Mouse über das Wort ExtaForm. Sollte in dem erscheinenden Hint nil stehen, so ist ExtraForm an dieser Stelle noch nicht erzeugt, was zur Schutzverletzung führt.
Sollte ExtraForm <> nil sein, dann drücke die [F8] Taste, um zu sehen, ob in dieser Zeile vielleicht doch eine AV (AccessViolation) auftritt. Mit F8 und F7 (bei Prozeduraufrufen) kannst du dein Programm jetzt Zeile für Zeile durchgehen, bis du den Fehler gefunden hast.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8
  Alt 17. Jun 2002, 23:03
Da fällt mir noch ein, dass man auch bei Warnungen und Fehlermeldungen von der OnlineHilfe unterstützt wird. Meist sogar mit Beispielen, die einem den Fehler aufzeigen. Einfach die Fehlermeldung anlicken und F1 drücken.
  Mit Zitat antworten Zitat
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#9
  Alt 17. Jun 2002, 23:07
hab ich gemacht, es kommt zuerst keine Fehlermeldung. Wenn ich mit dem Cursor über das Wort ExtraForm gehe, dann kommt ein gelbes fenster, da steht ein langer code drinn. Wenn ich dann F8 drücke, dann ist die Zeile ini.free; blau. Wenn ich nochmals F8 drücke, dann kommt die Fehlermeldung.
Grüße, m-werk
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#10
  Alt 17. Jun 2002, 23:12
Hi,

das lässt "vorübergehen" unterdrücken, indem du die Zeile ini.Free; Komentierst. müsste danach auch alles gehen. Ist abe rnicht sinn und zweck der Sache.
Eigentlich kann man es durch das schreiben von Create vor das Try, beheben. *verwirrtsei* Hab mal das gleiche Prb. gehabt. Kann nur z.Z. nicht nachschauen. *grrr*
Probier das mal aus.

Grüsse, Daniel
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 18:44 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