![]() |
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) |
AW: ValueListEditor
Er hat eine Stringlist (TStrings) und damit kann man alles machen, was man sonst auch damit machen kann.
|
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. |
AW: ValueListEditor
Wieviele Zeilen hat das Memo denn?
Genausoviel wie Aktienname? Wo wird das sichergestellt? Was sagt denn
Delphi-Quellcode:
? Zufällig 2?
ShowMessage(Memo1.Lines.Count)
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; |
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); ![]() ![]() oder ![]() und viele weitere Projekte, wie Hilfegeneratoren |
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; |
AW: ValueListEditor
Zitat:
Delphi-Quellcode:
oder
(* 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;
Delphi-Quellcode:
oder
(* PickListe --> Memo1 *)
procedure TForm1.BitBtn10Click(Sender: TObject); begin Memo1.Lines.Text := AktienName.Text; // Alle AktienNamen werden auf einmal ins Memo übertragen. end;
Delphi-Quellcode:
Warum die "oder"?
(* PickListe --> Memo1 *)
procedure TForm1.BitBtn10Click(Sender: TObject); begin Memo1.Text := AktienName.Text; // Alle AktienNamen werden auf einmal ins Memo übertragen. end;
Delphi-Quellcode:
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.
AktienName.Text;
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 ;-) |
AW: ValueListEditor
Zitat:
Zitat:
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 |
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 ;-) |
AW: ValueListEditor
Zitat:
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 11:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz