Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ValueListEditor (https://www.delphipraxis.net/212308-valuelisteditor.html)

wendelin 23. Jan 2023 18:33

Delphi-Version: 7

ValueListEditor
 
Hallo Delphifreunde,

ich habe eine einzige Frage :
Ist die Pickliste des ValueListEditors auch zur Laufzeit editierbar (insert, delete etc.)
Kann man die o.g. Pickliste zur Laufzeit speichern oder laden.

Für ein kurzes Beispiel wäre ich dankbar.

Wendelin (wolfgang)

himitsu 23. Jan 2023 18:36

AW: ValueListEditor
 
Er hat eine Stringlist (TStrings) und damit kann man alles machen, was man sonst auch damit machen kann.

wendelin 1. Feb 2023 00:11

AW: ValueListEditor
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke Himitsu für Deine Antwort,

Ich brauche den VLE um beim Einlesen von historischen Aktienkursen die kryptische WKN in den Aktienklarnamen zu übertragen.
Es liest sich einfacher!

Nun ist aber beim herumspielen mit dem testprogramm ein eigenartiges Problem aufgetaucht, welches ich nicht erklären kann.
Ich habe ein kurzes Testprogramm geschrieben. Ausschlieslich zum VALUELISTEDITOR.
Es klappt alles bis auf die Ausgabe der Pickliste im Memo. Siehe "procedure TForm1.BitBtn10Click(Sender: TObject);"
Vielleicht hast Du ja eine Erklärung.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Grids, ValEdit;

type
  TForm1 = class(TForm)
    ValueListEditor1: TValueListEditor;
    Edit1: TEdit;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;
    BitBtn5: TBitBtn;
    Memo1: TMemo;
    BitBtn6: TBitBtn;
    BitBtn7: TBitBtn;
    BitBtn8: TBitBtn;
    BitBtn9: TBitBtn;
    BitBtn10: TBitBtn;
    procedure FormCreate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
    procedure BitBtn5Click(Sender: TObject);
    procedure BitBtn6Click(Sender: TObject);
    procedure BitBtn7Click(Sender: TObject);
    procedure BitBtn9Click(Sender: TObject);
    procedure BitBtn10Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1       : TForm1;
  Aktienname : TStringList;

implementation

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
begin
  with ValueListEditor1 do
  begin
    DisplayOptions := [doColumnTitles,doAutoColResize];
    TitleCaptions[0] := 'WKN';
    TitleCaptions[1] := 'Aktienname';          // PickListe
    Aktienname      := TStringList.Create;
    Aktienname.Add('Cameco');
    Aktienname.Add('Infineon');
    Aktienname.Add('Livent');
    Aktienname.Add('Lynas');
    Aktienname.Add('Nordex');
    Aktienname.Add('Nel');
    Aktienname.Add('PlugPower');
    Aktienname.Sort;
    Edit1.Text := '?`';
  end;
end;
         (* Hinzufügen *)
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  with ValueListEditor1 do
  begin
    InsertRow(Edit1.Text,' ',False);
    with ItemProps[Row-1] do
    begin
      EditStyle := esPickList; // Klappbox
      PickList :=Aktienname;
    end
  end;
end;

         (* Zeile löschen *)
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  With ValueListEditor1 do if Strings.Count > 0 Then DeleteRow(Row);
end;
         (* Zeile überschreiben *)
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
  with ValueListEditor1 do if Strings.Count > 0 then Keys[Row] := Edit1.Text;
end;
          (* Speichern *)
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
  ValueListEditor1.Strings.SaveToFile('TestDat');
end;
          (* Laden *)
procedure TForm1.BitBtn5Click(Sender: TObject);
begin
  ValueListEditor1.Strings.LoadFromFile('TestDat');
end;
            (* Inhalt VLE --> Memo *)
procedure TForm1.BitBtn6Click(Sender: TObject);
begin
  Memo1.Lines := ValueListEditor1.Strings;
end;
           (* PickListe aktualisieren *)
procedure TForm1.BitBtn7Click(Sender: TObject);
begin
  Aktienname.Add(Edit1.Text)
end;
     (* gesammte PickListe löschen *)
procedure TForm1.BitBtn9Click(Sender: TObject);
begin
  Aktienname.Clear;
end;
     (* PickListe --> Memo1 *)
procedure TForm1.BitBtn10Click(Sender: TObject);
Var Laenge,i : Integer;
begin
  Laenge := AktienName.Count;
  showMessage(IntToStr(Laenge));       // Laenge ist OK
  For i := 0 to (Laenge -1) do
  begin
    ShowMessage(AktienName[i]);        // hier OK !! es kommen alle 7 Aktienklarnamen
    Memo1.Lines[i] := AktienName[i];   // Hier Fehler !!??  hier kommen nur 2 ?
  end;
end;

end.

Delphi.Narium 1. Feb 2023 01:10

AW: ValueListEditor
 
Wieviele Zeilen hat das Memo denn?

Genausoviel wie Aktienname? Wo wird das sichergestellt?

Was sagt denn
Delphi-Quellcode:
ShowMessage(Memo1.Lines.Count)
? Zufällig 2?

Wie wäre es denn mit
Delphi-Quellcode:
     (* PickListe --> Memo1 *)
procedure TForm1.BitBtn10Click(Sender: TObject);
Var Laenge, i : Integer;
begin
  Memo1.Lines.Clear;
  Laenge := AktienName.Count;
  ShowMessage(IntToStr(Laenge)); // Laenge ist OK
  for i := 0 to (Laenge - 1) do
  begin
    ShowMessage(AktienName[i]); // hier OK !! es kommen alle 7 Aktienklarnamen
    Memo1.Line.Add(AktienName[i]); // Hier werden nun alle Aktienklarnamen ans Memo angehängt.
  end;
end;

himitsu 1. Feb 2023 03:10

AW: ValueListEditor
 
globale Variablen :freak:


Nja, wenn das Memo nur 2 Zeilen hat, dann kann auch nur bei 2 Zeilen der Inhalt gesetzt werden.

Dein Glück, oder Pech, dass Memo.Lines (TMemoStrings), entgegen zu einer TStringList, beim Zugriff auf nichtexistierende Zeilen keine Exception auslöst, sondern dann einfach still und heimlich nichts macht.
Delphi-Quellcode:
Memo1.Text := AktienName.Text;

// oder
Memo1.Lines.Text := AktienName.Text;

// oder
Memo1.Lines := AktienName;

// oder
Memo1.Lines.Clear;
Memo1.Lines.AddStrings(AktienName[i]);


Und würde man den Komponenten und Events ordentliche Namen geben, dann wären solche (*Kommentare*) nutzlos. :zwinker:

PS: Zusätzlich ein "etwas" aktuelleres Delphi und schon hat man schöne Dinge, seit über 10 Jahren.
Delphi-Quellcode:
/// <summar> Speichern </summary>
procedure TForm1.BitBtn4Click(Sender: TObject);
https://www.embarcadero.com/de/products/delphi/starter
https://docwiki.embarcadero.com/RADS...n/Help_Insight

oder
https://devjetsoftware.com/products/...ation-insight/
und viele weitere Projekte, wie Hilfegeneratoren

wendelin 1. Feb 2023 10:13

AW: ValueListEditor
 
Danke Himitsu,
Deine ersten 2 Vorschläge funktionieren beide.
Gleichgültig ob mit oder ohne Memo1.Clear.
Zu Deinem Vorschlag ein neueres Delphi zu verwenden: Ich bin mittlerweile 77 Jahre alt und ein reiner Delphi-Autodidakt.
"Never change a running system". Ist mir auch zu teuer !

Danke nochmals !!


Delphi-Quellcode:
     (* PickListe --> Memo1 *)
procedure TForm1.BitBtn10Click(Sender: TObject);
Var Laenge,i : Integer;
begin
  Memo1.Clear;
  Laenge := AktienName.Count;
  showMessage(IntToStr(Laenge));      // Laenge ist OK
  For i := 0 to (Laenge -1) do
  begin
    Memo1.Lines[i]    := AktienName[i]; // lustig --> wenn ich Memo1.Clear einsetze kommt nur noch ein Aktienname (sonst 2)
 //   Memo1.Lines.Text := AktienName.Text; // es funktionieren beide Vorschläge
 //   Memo1.Text      := AktienName.Text; // es funktionieren beide Vorschläge
  end;
end;

Delphi.Narium 1. Feb 2023 10:35

AW: ValueListEditor
 
Zitat:

Zitat von wendelin (Beitrag 1518132)
Danke Himitsu,
Deine ersten 2 Vorschläge funktionieren beide.
Gleichgültig ob mit oder ohne Memo1.Clear.
Zu Deinem Vorschlag ein neueres Delphi zu verwenden: Ich bin mittlerweile 77 Jahre alt und ein reiner Delphi-Autodidakt.
"Never change a running system". Ist mir auch zu teuer !

Danke nochmals !!


Delphi-Quellcode:
     (* PickListe --> Memo1 *)
procedure TForm1.BitBtn10Click(Sender: TObject);
Var Laenge,i : Integer;
begin
  Memo1.Clear;
  Laenge := AktienName.Count;
  showMessage(IntToStr(Laenge));      // Laenge ist OK
  For i := 0 to (Laenge -1) do
  begin
    Memo1.Lines[i]    := AktienName[i]; // lustig --> wenn ich Memo1.Clear einsetze kommt nur noch ein Aktienname (sonst 2)
 //   Memo1.Lines.Text := AktienName.Text; // es funktionieren beide Vorschläge
 //   Memo1.Text      := AktienName.Text; // es funktionieren beide Vorschläge
  end;
end;


Delphi-Quellcode:
     (* PickListe --> Memo1 *)
procedure TForm1.BitBtn10Click(Sender: TObject);
Var Laenge,i : Integer;
begin
  Memo1.Clear;
  Laenge := AktienName.Count;
  showMessage(IntToStr(Laenge));      // Laenge ist OK
  For i := 0 to (Laenge -1) do
  begin
    Memo1.Lines.Add(i]) := AktienName[i];
  end;
end;
oder
Delphi-Quellcode:
     (* PickListe --> Memo1 *)
procedure TForm1.BitBtn10Click(Sender: TObject);
begin
  Memo1.Lines.Text := AktienName.Text; // Alle AktienNamen werden auf einmal ins Memo übertragen.
end;
oder
Delphi-Quellcode:
     (* PickListe --> Memo1 *)
procedure TForm1.BitBtn10Click(Sender: TObject);
begin
  Memo1.Text := AktienName.Text; // Alle AktienNamen werden auf einmal ins Memo übertragen.
end;
Warum die "oder"?
Delphi-Quellcode:
AktienName.Text;
enthält bereits alle Texte, so dass hier die For-Schleife entfallen kann. Bei Nutzung der Vorschleife wird quasi für jeden Aktiennamen einmal alles durch alles ersetzt. Es wird also unnütz viel Aufwand betrieben.

Abgesehen davon ist Delphi 7 nach wie vor eine excellent gute Entwicklungsumgebung und immernoch mein 'Lieblingsspielzeug'. Die Masse der Probleme, nach deren Lösung hier im Forum bezüglich neuerer Delphiversionen und der IDE gefragt wird, hat man mit Delphi 7 einfach nicht ;-)
Und nein, es ist nicht mehr "state of the art", aber als Hobby für das, was man so als Rentner benötigt, reicht es vollkommen aus ;-)

Maekkelrajter 1. Feb 2023 11:16

AW: ValueListEditor
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1518135)
Abgesehen davon ist Delphi 7 nach wie vor eine excellent gute Entwicklungsumgebung und immernoch mein 'Lieblingsspielzeug'. Die Masse der Probleme, nach deren Lösung hier im Forum bezüglich neuerer Delphiversionen und der IDE gefragt wird, hat man mit Delphi 7 einfach nicht ;-)
Und nein, es ist nicht mehr "state of the art", aber als Hobby für das, was man so als Rentner benötigt, reicht es vollkommen aus ;-)

Zitat:

Zitat von wendelin (Beitrag 1518132)
Zu Deinem Vorschlag ein neueres Delphi zu verwenden: Ich bin mittlerweile 77 Jahre alt und ein reiner Delphi-Autodidakt.
"Never change a running system". Ist mir auch zu teuer !

Man kann trefflich darüber streiten, 'was man als Rentner so benötigt'. Ich jedenfalls (Rentner, 76, Hobby-Entwickler und Autodidakt) möchte auf die Errungenschaften der neueren Delphi-Versionen nicht mehr verzichten. Das ist ja auch nicht nötig, alldieweil es ja die kostenlose Community-Edition gibt.
Auch ich habe allerdings die Erfahrung gemacht, dass es mit zunehmendem Alter schwerer fällt, sich in etwas Neues einzuarbeiten. Aber das kann man ja mit der CE risikolos ausprobieren.

Gruß LP

Delphi.Narium 1. Feb 2023 11:36

AW: ValueListEditor
 
Die Smilies in meinen Text sind ja nicht so ganz unbeabsichtigt.

Natürlich kann man auch als Rentner 'ne neue Delphiversion, die auch noch kostenlos ist, nutzen oder einfach FreePascal verwenden und zum Frischhalten der grauen Zellen auch was Neues ausprobieren.

Man hat als Rentner halt die Freiheit zu entscheiden: Delphi 7 reicht mir oder ich will was Neues. Das "Muss" zum Aktuellbleiben ist aber nicht mehr da und das kann schon ganz schön entspannend wirken.

Frei nach dem Motto: Wenn ich was Neues ausprobieren möchte, dann tu ich's, wenn nicht, dann lass ich's. Es gibt noch soviel mehr im Leben, als Programmieren ;-)

Maekkelrajter 1. Feb 2023 12:43

AW: ValueListEditor
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1518140)
Die Smilies in meinen Text sind ja nicht so ganz unbeabsichtigt.

Ich bitte um Nachsicht, aber wenn ich Rentner-Bashing auch nur wittere, dann wird bei mir ein Reflex getriggert, der dazu führt, dass ich sogar Smileys ignoriere :wink:
Dann gilt es nur noch, aufs energischste dem Eindruck entgegenzutreten, dass Rentner den ganzen Tag vor dem Fernseher oder auf der Parkbank sitzen, grundsätzlich Gas- und Bremspedal verwechseln und sich auf Kaffefahrten oder per Enkeltrick abzocken lassen! :wink:
So, jetzt wird's aber endgültig O.T. :oops:

Gruß LP


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:46 Uhr.
Seite 1 von 2  1 2      

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