Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TJvFormStorage (https://www.delphipraxis.net/214409-tjvformstorage.html)

jik 7. Jan 2024 13:14

TJvFormStorage
 
Hallo mitsammen,

ich wusste ja, dass es kein Spaziergang würde mit dem Umstieg von 5 auf 12. Aber so ...

Zuerst aber mal danke an @dummzeuch für die GExperts!


FormStorage war beim 5er ein Klacks - Kompo aufs Form - fertig. Zwar finde ich die Idee mit den unterschiedlichen Storages praktisch, wenn ich wüsste, was die wollen. Trotz Hilfe passiert einfach nichts. Also:

1. TJvFormStorage gedroppt
2. TJvAppIniFileStorage ebenfalls
3. 2 bei 1 eingetragen (Bei AppStorage)
4. Bei JvFormStorage1.AppStoragePath die Vorgabe '%FORM_NAME%' drin gelassen (ist ja wohl die Sektion in der Ini, denke ich), aber auch mit 'fMain' probiert, bringt auch nichts.
5. JvFormStorage1.Active und sicherheitshalber auch JvFormStorage1.FlushOnDestroy sind an
5. Bei JvAppIniFileStorage1.FileName Pfad und Name der Ini-Datei angegeben

Zusätzlich noch mit SaveFormPlacement und RestoreFormPlacement probiert, es passiert auch nichts, die (schon vorhandene) Inidatei wird nicht aktualisiert. Die nächste Stufe wäre in den Quellcode hineingraben.

Verwendet das Ding von euch jemand erfolgreich?

dummzeuch 7. Jan 2024 13:41

AW: TJvFormStorage
 
Zitat:

Zitat von jik (Beitrag 1531592)
1. TJvFormStorage gedroppt
2. TJvAppIniFileStorage ebenfalls
3. 2 bei 1 eingetragen (Bei AppStorage)
4. Bei JvFormStorage1.AppStoragePath die Vorgabe '%FORM_NAME%' drin gelassen (ist ja wohl die Sektion in der Ini, denke ich), aber auch mit 'fMain' probiert, bringt auch nichts.
5. JvFormStorage1.Active und sicherheitshalber auch JvFormStorage1.FlushOnDestroy sind an
5. Bei JvAppIniFileStorage1.FileName Pfad und Name der Ini-Datei angegeben

Zusätzlich noch mit SaveFormPlacement und RestoreFormPlacement probiert, es passiert auch nichts, die (schon vorhandene) Inidatei wird nicht aktualisiert. Die nächste Stufe wäre in den Quellcode hineingraben.

Ja, schon jahrelang, aber immer seltener, weil ich inzwischen lieber spezielle Config-Objekte verwende statt Properties von Controls zu speichern.

Dumme Frage: Hast Du auch konfiguriert, welche Properties von welchen Controls gespeichert werden sollen? Oder geht es erst mal nur um die Position des Fensters?

jik 7. Jan 2024 14:20

AW: TJvFormStorage
 
Doch, ich hab zwei Komponenten (Edit, Checkbox) zum Testen eingetragen. Er erzeugt auch keine Ini-Datei und wenn man sie ihm anlegt, passiert nichts drin. Wahrscheinlich ist es was so Offensichtliches, dass ich immer drüberfalle.

Was ist der Vorteil deiner Config-Objekte? Vielleicht ist das für mich ja ein Anlass, umzudenken. Ich handhabe derzeit viele Einstellungen über ein Einstellungsfenster mit mehreren Tabs, dort Checkboxen, Radiobuttons, Eingabefelder, das Übliche halt, sind über 700 Parameter allein dort. Da dieses Fenster immer aktiv ist, ist auch die Abfrage problemlos. Magst du kurz was zu deinen Objekten sagen?

dummzeuch 7. Jan 2024 15:25

AW: TJvFormStorage
 
Zitat:

Zitat von jik (Beitrag 1531597)
Doch, ich hab zwei Komponenten (Edit, Checkbox) zum Testen eingetragen. Er erzeugt auch keine Ini-Datei und wenn man sie ihm anlegt, passiert nichts drin. Wahrscheinlich ist es was so Offensichtliches, dass ich immer drüberfalle.

Ich habe gerade ein neues Projekt angelegt und es ausprobiert. Es hat zuerst auch nicht geklappt, weil ich vergessen hatte, bei der AppIniFileStorage-Komponente die Property Filename zu setzen. Danach ging's aber.

DFM:
Code:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 336
  ClientWidth = 635
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object ed_Bla: TEdit
    Left = 136
    Top = 56
    Width = 121
    Height = 21
    TabOrder = 0
  end
  object TheFormStorage: TJvFormStorage
    AppStorage = TheAppIniFileStorage
    AppStoragePath = '%FORM_NAME%'
    StoredProps.Strings = (
      'ed_Bla.Text')
    StoredValues = <>
    Left = 312
    Top = 176
  end
  object TheAppIniFileStorage: TJvAppIniFileStorage
    StorageOptions.BooleanStringTrueValues = 'TRUE, YES, Y'
    StorageOptions.BooleanStringFalseValues = 'FALSE, NO, N'
    AutoFlush = True
    FileName = 'blablub.ini'
    SubStorages = <>
    Left = 376
    Top = 240
  end
end
Unit:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, JvAppStorage, JvAppIniStorage, JvComponentBase,
  JvFormPlacement, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    TheFormStorage: TJvFormStorage;
    TheAppIniFileStorage: TJvAppIniFileStorage;
    ed_Bla: TEdit;
  private
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

end.
Zitat:

Zitat von jik (Beitrag 1531597)
Was ist der Vorteil deiner Config-Objekte? Vielleicht ist das für mich ja ein Anlass, umzudenken. Ich handhabe derzeit viele Einstellungen über ein Einstellungsfenster mit mehreren Tabs, dort Checkboxen, Radiobuttons, Eingabefelder, das Übliche halt, sind über 700 Parameter allein dort. Da dieses Fenster immer aktiv ist, ist auch die Abfrage problemlos. Magst du kurz was zu deinen Objekten sagen?

Der Hauptvorteil ist, dass es unabhängig von Formularen ist. Man kann sich eine Struktur basteln, die der Logik folgt statt der Darstellung. Dafür hat man aber den zusätzlichen Aufwand, dass man die Einstellungen zwischen Config-Objekt und Config-Dialog hin- und herschaufeln muss.

jik 7. Jan 2024 15:48

AW: TJvFormStorage
 
Hallo Thomas,

hab deine pas/dfm verglichen - logisch identisch. Dann ... Autsch - das ist mir jetzt schon mehr als peinlich ... Bevor ich mich hier ins Forum begeben hatte, hab ich selbst versucht, einen Ersatz mit einer TMemIniFile zu überlegen. Das in einer eigenen Unit für allgemeine Funktionen und dort dieses hier:
Code:
initialization
  cIniFile := TMemIniFile.Create(AppData + 'PatchworkM.ini')

finalization
  cIniFile.UpdateFile;
  FreeAndNil(cIniFile);
Nun ja, und Trumpf sticht halt immer ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 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