Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.351 Beiträge
 
Delphi 11 Alexandria
 
#14

Re: Überlegungen für variables Speichern der Konfiguration

  Alt 19. Mai 2009, 16:32
Zitat von Pfoto:
Planst du eine Abfrage einzubauen, ob ein Verzeichnis Admin-Rechte
braucht, so dass die Option "portable Version" deaktiviert ist?
Den Wizard und das Handling usw. wollte ich bewusst aus der Unit ausklammern und nur exemplarisch in der Demo zeigen, denn das lässt sich allgemein kaum machen. Das kann jeder selbst überlegen wie detailliert welche Optionen angeboten werden sollen und wie der entsprechende Dialog aussehen soll.

Die Unit an sich soll wirklich nur bei der Verwaltung des Speicherortes helfen.

Heißt: Welche Optionen du dem Benutzer anbietest und welche ggf. deaktivierst, liegt an dir. Du könntest ja, wenn der Benutzer die portable Option anklickt, vorher kurz eine Datei im Exeverzeichnis anlegen um zu schauen ob das geht bevor du die Seite umschaltest. Ich schaue einmal ob ich eine schönere allgemeine Lösung sehe, aber ich denke so einfach ist das nicht (Stichwort Netzwerkverzeichnisse, usw.).

Zitat von Pfoto:
Schade ist, dass man für jede Art des Speichern / Ladens die Implementierung
erweitern muss, bei einer abgeleiteten Version kommen ja noch die
Sicherheitsabfragen hinzu.
Musst du ja nicht. Du musst nur die Implementierung von TAppData verändern, nicht die von SJConfigUtils.pas.
Und wie in dem Beispiel TAppData musst du dich ja sonst auch um die Speicherung kümmern, nur dass du so dich nicht darum kümmern musst, dass die Datei geöffnet wird usw. und wo diese liegt.
Im Grunde musst du nur die Zeilen mit TryReadString bzw. WriteString duplizieren. Die Abfragen müssen nicht jedesmal wiederholt werden!

Beispiel:
Delphi-Quellcode:
begin
  if Ini.SectionExists('Userinfo') then
  begin
    fUserName := TryReadString('Userinfo', 'Username');
  end
  else
    raise ELoadConfigException.Create(Format(sErrorLoadingConfig + sDLB
      + sIniSectionNotFound, ['Userinfo']));
end;
Weitere Abfragen kannst du jetzt direkt da hineinpacken.
Delphi-Quellcode:
begin
  if Ini.SectionExists('Userinfo') then
  begin
    fUserName1 := TryReadString('Userinfo', 'Username1');
    fUserName2 := TryReadString('Userinfo', 'Username2');
    fUserName3 := TryReadString('Userinfo', 'Username3');
    fUserName4 := TryReadString('Userinfo', 'Username4');
    fUserName5 := TryReadString('Userinfo', 'Username5');
    fUserName6 := TryReadString('Userinfo', 'Username6');
    ...
  end
  else
    raise ELoadConfigException.Create(Format(sErrorLoadingConfig + sDLB
      + sIniSectionNotFound, ['Userinfo']));

  if Ini.SectionExists('UserDataXYZ') then
  begin
    fUserData1 := TryReadString('UserDataXYZ', 'UserData1');
    fUserData2 := TryReadString('UserDataXYZ', 'UserData2');
    fUserData3 := TryReadString('UserDataXYZ', 'UserData3');
    fUserData4 := TryReadString('UserDataXYZ', 'UserData4');
    fUserData5 := TryReadString('UserDataXYZ', 'UserData5');
    fUserData6 := TryReadString('UserDataXYZ', 'UserData6');
    ...
  end
  else
    raise ELoadConfigException.Create(Format(sErrorLoadingConfig + sDLB
      + sIniSectionNotFound, ['UserDataXYZ']));
end;
Mir ist da keine universellere Lösung eingefallen.
Ich könnte höchstens die TryReadString mit weiteren Typen mit in SJConfigUtils.pas nehmen, aber ich fand das da sinnvoller.

Zitat von Pfoto:
Ich arbeite bei mir zur Zeit mit einer Xml-Datei. Deren Werte können - wenn
sie einmal an einer Stelle definiert sind - automatisch als Stream, als Datei
oder als Wert in die Registry geschrieben / geladen werden.
Wenn du einen Stream hast, kannst du ja direkt die Streammethoden verwenden und INI oder Registry erst gar nicht beachten. Und die Werte dann ausgelesen als Eigenschaften in TAppData zu definieren oder so ist ja kein Muss, das kannst du ja weiter wie bisher nutzen.

// EDIT:
Weitere Demos mit Streams und so werden natürlich noch folgen, aber das ist halt ein wenig Arbeit noch.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat