Entwickler-Ecke

Dateizugriff - Hilfe zur Registry!


Nise - Mo 19.05.03 10:13
Titel: Hilfe zur Registry!
Hallo zusammen!

Ich habe ein kleines Problem mit der Registry und zwar versuche ich ein Käckchen (Checked) in einem Popup menü in die Registry zu speichern.

Ich habe mehrere Popup menüs und möchte das wenn ich aus dem Programm aussteige das es mir auch die Häckchen bleiben wo ich sie angeklickt habe.

Mit diesem Code speichert er mir nur die Seiten ab aber nicht die einzelnen Details.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TFmHaupt.FmClose(Sender: TObject; var Action: TCloseAction);
var regist: TRegistry;
begin
  regist:=TRegistry.Create;
  regist.RootKey:=HKEY_CURRENT_USER;
  regist.OpenKey('Software\Borland\Delphi\6.0', true);
  regist.WriteInteger('Left', FMHaupt.Left);
  regist.WriteInteger('Top', FMHaupt.Top);
  regist.free;
end;

Frage: Funktioniert das? Wenn ja wie?

Danke im Vorraus Denise

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.


foxy - Mo 19.05.03 10:25

hi
he ? ich versteh dein problem nicht

danns chreib doch noch einen wert in die reg und frag dann bei der formcreate ab ob dieser existiert oder ob der den wert 1 hat und wenn ja machste checkbox1.cheched := true fertig

oder meinst du was anderes ???


[/delphi]


Tino - Mo 19.05.03 10:31


Delphi-Quelltext
1:
regist.WriteBool ('Check1', MenuItem1. Checked);                    


Nise - Mo 19.05.03 10:32
Titel: Hallo!
Hy!

Ich habe ein Procedure und möchte das diese in die Registry übernommen wird! Bzw. das die einzelnen Checked Felder die aktiv (angeklickt wurden) sind in die Registry übernommen werden. Kann ich das mit hilfe von Tag in die Registry schreiben oder muss ich jedes einzeln an geben?

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TFmHaupt.WarengruppenSuchenExecute(Sender: TObject);
begin
   case TComponent(Sender).Tag of

    3303begin
          WaGrWGNr.Checked := true;
          WaGrBezeichnung.Checked := false;
          WarSU1.Text := '';
          Label3.Caption := 'Warengruppen Nr.';
          WarSU1.Visible := True;
          WarSU1.OnChange := WarSU1Change;
          end;
    3304begin
          WaGrWgNr.Checked := false;
          WaGrBezeichnung.Checked := true;
          WarSU1.Text := '';
          Label3.Caption := 'Bezeichnung';
          WarSU1.Visible := True;
          WarSU1.OnChange := WarSU2Change;
          end;
end;
end;


Mfg Denise

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.


Tino - Mo 19.05.03 11:20

Hallo!

Hat Dir mein Posting nicht geholfen? Wenn nicht dann sag bitte warum nicht :-) !

Was meinst du mit eine Procedure in die Registry schreiben? Du kannst in die Registry Werte lesen und schreiben. Wie das geht weißt du ja (Du hast oben ja den Code gepostet). Wie man einen Boolean Wert (die Checked Eigenschaft ist vom Typ Boolean) in die Registry schreibt habe ich oben auch gepostet.

Gruß
Tino


Nise - Mo 19.05.03 11:46
Titel: Hallo!
Entschuldige habe ich übersehen!

Funktioniert aber nicht denn ich bekomme den Fehler Boolean und Integer nicht kompatible! Ich habe dann probiert noch eine Prozedur zu schreiben funktioniert aber auch nicht!

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  regist:=TRegistry.Create;
  regist.RootKey:=HKEY_CURRENT_USER;
  regist.OpenKey('Software\Borland\Delphi\6.0', true);
  regist.WriteInteger('Left', FMHaupt.Left);
  regist.WriteInteger('Top', FMHaupt.Top);
  regist.WriteBool('Checked', FMHaupt.Tag); <Fehler>
  regist.free;

Ich kenne mich leider noch nicht so gut mit delphi aus! Ich hoffe ich bin entschuldigt bin noch blut junger anfänger!

Mfg und Danke im Vorraus Nise

Moderiert von user profile iconUGrohne: Delphi-Tags eingefügt


TheNeon - Mo 19.05.03 11:58

... entschuldigt ist es nicht!! ...... weil es da nix zu entschuldigen gibt ;) ...... haben ja alle mal angefangen , oder?? ;)

also:
der Tag ist ein Integerwert, du aber willst ja einen boolschen Wert reinsetzen. Dein Fehler kommt, weil du falsch abgeschrieben hast:
Tino hat nicht

Delphi-Quelltext
1:
regist.WriteBool('Checked', FMHaupt.Tag);                    

sondern

Delphi-Quelltext
1:
regist.WriteBool ('Checked', FMHaupt. Checked);                    

geschrieben ........ schreibst du richtig ab, dann kann gar nix passieren :D


Nise - Mo 19.05.03 12:56
Titel: Danke!
Jetzt kommt zwar keine Fehlermeldung mehr (Fortschritt) aber es passiert auch nichts! Ich habe es so angeschrieben wie du es angegeben hast aber es passiert einfach nicht's! Ich habe das programm gestartet einen Checked angeklickt und das programm wieer Geschlossen und neu gestartet zum sehen ob es funktioniert!

Aber es macht gar nichts!

Ist es möglich das es so garnicht funktioniert? Oder woran kann es liegen?

Mfg Denise


Nise - Mo 19.05.03 13:03
Titel: Noch ne kurze Frage!
Kann es sein das ich im RegistrierungsEditor etwas Falsch angegeben habe? Kann es damit zusammen hängen?

Mfg Denise


Tino - Mo 19.05.03 13:34

Hallo,

zeig doch mal den Code mit dem Du den Wert wieder ausliest. Denn mit:

Delphi-Quelltext
1:
regist.WriteBool ('Checked', FMHaupt.Checked);                    

schreibst Du ja einen Wert in die Registry. Nicht mehr und nicht weniger. Du musst natürlich auch noch beim Starten der Anwendung den Wert wieder aus der Registry lesen und diesen der Komponente zuweisen:

Delphi-Quelltext
1:
FMHaupt.Checked := regist.ReadBool ('Checked');                    


Gruß
Tino


Nise - Mo 19.05.03 13:43
Titel: Hy!
Habe einbisschen herum Probiert (leider) jetzt funktioniert es wieder nicht jetzt bringt er mir in diesem Code

Delphi-Quelltext
1:
regist.WriteBool('Checked', FMHaupt.Checked);                    

Undefinierter Bezeichner Checked;

Ausgegeben hätte ich den Code mit ReadBool! Ich weiß auch nicht was ich andauert falsch mache!

Danke für die Hilfe

Nise

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.


Nise - Mo 19.05.03 13:57
Titel: Hallo!
Frage kann ich irgend wie testen ob er mir es überhaupt einließt?

Irgendwo nach sehen?

Mfg Nise


Tino - Mo 19.05.03 14:57
Titel: Re: Hy!
Nise hat folgendes geschrieben:
Undefinierter Bezeichner Checked;

Ist FMHaupt auch ein TMenuItem oder nur vom Type TMenu? Es muss natürlich vom Type TMenuItem sein da nur dieses Objekt eine Eigenschaft namens Checked besitzt.

Gruß
Tino


Nise - Mo 19.05.03 15:22
Titel: FMHaupt!
Ist der Name eines meiner Formulare! Ich habe es jetzt anders angeschrieben und zwar

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
procedure TFmHaupt.FmDestroy(Sender: TObject);
var regist: TRegistry;
begin
  regist:=TRegistry.Create;
  regist.RootKey:=HKEY_CURRENT_USER;
  regist.OpenKey('Software\ZVVerwaltung\DialogPosition\FMHaupt', true);
  regist.WriteInteger('3000', FMHaupt.Tag);
  regist.WriteInteger('3016', FMHaupt.Tag);
  regist.WriteInteger('3101', FMHaupt.Tag);
  regist.WriteInteger('3111', FMHaupt.Tag);
  regist.WriteInteger('3201', FMHaupt.Tag);
  regist.WriteInteger('3221', FMHaupt.Tag);
  regist.WriteInteger('3301', FMHaupt.Tag);
  regist.WriteInteger('3303', FMHaupt.Tag);
  regist.WriteInteger('3401', FMHaupt.Tag);
  regist.WriteInteger('3405', FMHaupt.Tag);
  regist.WriteInteger('3501', FMHaupt.Tag);
  regist.WriteInteger('3505', FMHaupt.Tag);
  regist.WriteInteger('3601', FMHaupt.Tag);
  regist.WriteInteger('3605', FMHaupt.Tag);
  regist.WriteInteger('3701', FMHaupt.Tag);
  regist.WriteInteger('3710', FMHaupt.Tag);
  regist.free;
end;

Für jedes Popup menü wo ich ein Checked benutze habe ich über den tag die Checked funktion angegeben! Nur habe ich noch ein kleines Problem und zwar das auslesen funktioniert noch nicht!

Kann mir da noch jemand helfen?

Mfg Nise

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.


Tino - Mo 19.05.03 17:07

Hi Nise,

bitte benutze in Zukunft wenn Du Sourcecode in deinen Beiträgen postest die Delphi-Tags damit der Sourcecode besser zu lesen ist. So benutzt du den Tag (ohne das Sternchen):
[delphi*]
procedrue TFmHaupt.FmDestroy(Sender: TObject);
[/delphi*]

So, jetzt zu deinem Problem. Leider kapiere ich wieder nicht was du vorhast :-) Deshalb habe ich zwei Fragen:
Nise hat folgendes geschrieben:
Für jedes Popup menü wo ich ein Checked benutze

Ein Popup-Menu verfügt über keine Checked Eigenschaft. Was meinst Du genau?

Nise hat folgendes geschrieben:
habe ich über den tag die Checked funktion angegeben!

Was meinst du mit Checked-Funktion?

Gruß
Tino


Nise - Di 20.05.03 09:40
Titel: Guten Morgen!
Ich habe über eine Action eine Checked im Popup menü.

Jetzt funktioniert es auch schon so weit das er es ein und aus lesen kann aber ich habe noch ein problem mit dem ausgeben!

Ausgeben: Wenn ich ein Checked anklicke soll es bestehen bleiben und beim Programm schließen in die Registry eingetragen werden und beim wieder starten des Programmes soll er mir das Häckchen (Checked) aus der Registry nehmen und dann wieder machen.


Hier ließt er es ein!

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
procedure TFmHaupt.FmClose(Sender: TObject; var Action: TCloseAction);
var regist : TRegistry;
begin
  regist:=TRegistry.Create;
  regist.RootKey:=HKEY_CURRENT_USER;
  regist.OpenKey('Software\ZVVerwaltung\DialogPosition\FMHaupt', true);

  regist.WriteInteger('Tag', ZimmTabeTag);
  regist.WriteInteger('Tag1', ZimmSuchTag);
  regist.WriteInteger('Tag2', AdreTabeTag);
  regist.WriteInteger('Tag3', AdreSuchTag);
  regist.WriteInteger('Tag4', ArtiTabeTag);
  regist.WriteInteger('Tag5', ArtiSuchTag);
  regist.WriteInteger('Tag6', WareTabeTag);
  regist.WriteInteger('Tag7', WareSuchTag);
  regist.WriteInteger('Tag8', KontTabeTag);
  regist.WriteInteger('Tag9', KontSuchTag);
  regist.WriteInteger('Tag10', KostTabeTag);
  regist.WriteInteger('Tag11', KostSuchTag);
  regist.WriteInteger('Tag12', DokuTabeTag);
  regist.WriteInteger('Tag13', DokuSuchTag);
  regist.WriteInteger('Tag14', HistTabeTag);
  regist.WriteInteger('Tag15', HistSuchTag);

  regist.free;
end;

und hier wieder aus!

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
  regist:=TRegistry.Create;
  regist.RootKey:=HKEY_CURRENT_USER;
  regist.OpenKey('Software\ZVVerwaltung\DialogPosition\FMHaupt', true);

  ZimmTabeTag := regist.ReadInteger('Tag');
  ZimmSuchTag := regist.ReadInteger('Tag1');
  AdreTabeTag := regist.ReadInteger('Tag2');
  AdreSuchTag := regist.ReadInteger('Tag3');
  ArtiTabeTag := regist.ReadInteger('Tag4');
  ArtiSuchTag := regist.ReadInteger('Tag5');
  WareTabeTag := regist.ReadInteger('Tag6');
  WareSuchTag := regist.ReadInteger('Tag7');
  KontTabeTag := regist.ReadInteger('Tag8');
  KontSuchTag := regist.ReadInteger('Tag9');
  KostTabeTag := regist.ReadInteger('Tag10');
  KostSuchTag := regist.ReadInteger('Tag11');
  DokuTabeTag := regist.ReadInteger('Tag12');
  DokuSuchTag := regist.ReadInteger('Tag13');
  HistTabeTag := regist.ReadInteger('Tag14');
  HistSuchTag := regist.ReadInteger('Tag15');

  regist.free;

Hier noch ein Beispiel wo ich die Checked angebe.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
procedure TFmHaupt.ZimmTabellenExecute(Sender: TObject);
begin
  case TComponent(Sender).Tag of

    3000begin
          ZimmerZimmerNummer.Checked := true;
          ZimmerStock.Checked := false;
          ZimmerZimmerTyp.Checked := false;
          ZimmerMaximumBetten.Checked := false;
          ZimmerZimmerAusstattung.Checked := false;
          ZimmerZimmerAusrichtung.Checked := false;
          ZimmerPreis1.Checked := false;
          ZimmerPreis2.Checked := false;
          ZimmerPreis3.Checked := false;
          ZimmerPreis4.Checked := false;
          ZimmerPreis5.Checked := false;
          ZimmerPreis6.Checked := false;
          ZimmerPreis7.Checked := false;
          ZimmerPreis8.Checked := false;
          ZimmerPreis9.Checked := false;
          ZimmerPreis10.Checked := false;
<Registry>  ZimmTabeTag := ZimmerZimmerNummer.Tag; <Registry>
          end;
end;

So weit so gut, aber ich weiß nicht wie ich es angeben soll das es funktioniert!

Ich hoffe es ist einiger Maßen gut erklärt!

Mfg Denise

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.


Tino - Di 20.05.03 10:51
Titel: Re: Guten Morgen!
Nise hat folgendes geschrieben:
Ich habe über eine Action eine Checked im Popup menü.

Ich gehe mal davon aus das Du ein tMenuItem einer Action zugewiesen hast und über die Checked-Eigenschaft der Action änderst Du den Checked-Status des Menueintrags. Ist das richtig?

Nise hat folgendes geschrieben:
Wenn ich ein Checked anklicke soll es bestehen bleiben und beim Programm schließen in die Registry eingetragen werden und beim wieder starten des Programmes soll er mir das Häckchen (Checked) aus der Registry nehmen und dann wieder machen.

Wie das geht habe ich doch schon oben geschrieben.

Hier noch mal (diesmal mit Actions):

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  regist:=TRegistry.Create; 
  regist.RootKey:=HKEY_CURRENT_USER; 
  regist.OpenKey('Software\ZVVerwaltung\DialogPosition\FMHaupt', true);
 
  regist.WriteBool ('Action1', Action1.Checked);
  regist.WriteBool ('Action2', Action2.Checked);
  regist.WriteBool ('Action3', Action3.Checked);

und das laden

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  regist:=TRegistry.Create; 
  regist.RootKey:=HKEY_CURRENT_USER; 
  regist.OpenKey('Software\ZVVerwaltung\DialogPosition\FMHaupt', true); 

  Action1.Checked := regist.ReadBool ('Action1');
  Action2.Checked := regist.ReadBool ('Action2');
  Action3.Checked := regist.ReadBool ('Action3');
Gruß

Tino

PS: Bitte beachte meinen Hinweis mit den Delphi-Tags!


Nise - Di 20.05.03 16:16
Titel: Hallo!
Das oben angeführte Beispiel funktioniert wunderbar!

Nur die Action wird nicht ausgelöst.

Woran kann das liegen?

Mfg Denise


Tino - Di 20.05.03 16:29
Titel: Re: Hallo!
Nise hat folgendes geschrieben:
Nur die Action wird nicht ausgelöst.

Hast Du die Action auch mit einem tMenuItem verbunden?


Nise - Di 20.05.03 16:40
Titel: Hallo
Ja habe ich und sie wird aber nicht ausgelöst. Keine Ahnunung wieso er das nicht macht!

Mfg Nise


Nise - Mi 21.05.03 10:45
Titel: Guten Morgen!
Eine Frage!

Wenn ich denn Namen des Popups angebe und diese mit der Action verbinde.

Ungefähr so : ZiNr.Action.Tag := regist.ReadInteger('3016');

Und diseses angebe bekomme ich einen Fehler mit dem Sender!

Sender:

case TComponent(Sender).Tag of

3016: begin
ZiNr.Checked := true;
ZiStock.Checked := false;
end;

Kann ich das überhaupt in diese art anschreiben oder funktioniert das garnicht?

Wie muss man das sonst anschreiben? Bin leider noch nicht dahinter gekommen!

Mfg

Denise