AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ValueListEditor

Ein Thema von wendelin · begonnen am 23. Jan 2023 · letzter Beitrag vom 2. Feb 2023
Antwort Antwort
Seite 1 von 2  1 2      
wendelin

Registriert seit: 29. Dez 2010
Ort: Nürnberg
126 Beiträge
 
Delphi 7 Enterprise
 
#1

ValueListEditor

  Alt 23. Jan 2023, 19:33
Delphi-Version: 7
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)
Wolfgang
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: ValueListEditor

  Alt 23. Jan 2023, 19:36
Er hat eine Stringlist (TStrings) und damit kann man alles machen, was man sonst auch damit machen kann.
$2B or not $2B
  Mit Zitat antworten Zitat
wendelin

Registriert seit: 29. Dez 2010
Ort: Nürnberg
126 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: ValueListEditor

  Alt 1. Feb 2023, 01:11
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.
Miniaturansicht angehängter Grafiken
vle.jpg  
Wolfgang
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#4

AW: ValueListEditor

  Alt 1. Feb 2023, 02:10
Wieviele Zeilen hat das Memo denn?

Genausoviel wie Aktienname? Wo wird das sichergestellt?

Was sagt denn 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;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: ValueListEditor

  Alt 1. Feb 2023, 04:10
globale Variablen


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.

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
$2B or not $2B

Geändert von himitsu ( 1. Feb 2023 um 04:27 Uhr)
  Mit Zitat antworten Zitat
wendelin

Registriert seit: 29. Dez 2010
Ort: Nürnberg
126 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: ValueListEditor

  Alt 1. Feb 2023, 11:13
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;
Wolfgang
  Mit Zitat antworten Zitat
Alt 1. Feb 2023, 11:15     Erstellt von Momo311
Dieser Beitrag wurde von TBx gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#7

AW: ValueListEditor

  Alt 1. Feb 2023, 11:35
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"?
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
  Mit Zitat antworten Zitat
Maekkelrajter

Registriert seit: 8. Mär 2017
Ort: Köln
157 Beiträge
 
Delphi 12 Athens
 
#8

AW: ValueListEditor

  Alt 1. Feb 2023, 12:16
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
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
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#9

AW: ValueListEditor

  Alt 1. Feb 2023, 12:36
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

Geändert von Delphi.Narium ( 1. Feb 2023 um 12:37 Uhr) Grund: Schreibfehler, wie immer :-(
  Mit Zitat antworten Zitat
Maekkelrajter

Registriert seit: 8. Mär 2017
Ort: Köln
157 Beiträge
 
Delphi 12 Athens
 
#10

AW: ValueListEditor

  Alt 1. Feb 2023, 13:43
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
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!
So, jetzt wird's aber endgültig O.T.

Gruß LP
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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