![]() |
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 |
AW: ValueListEditor
Ich gehöre auch "zum alten Eisen", sprich: bin Rentner. Und sehe das Rentnerdasein mit 'nem Augenzwinkern, weil all die Klischees über Rentner irgendwie so überhauptganzundgarnichtnochnichtmalansatzweisenoc hvielwenigerundsowiesonicht passen :-)
|
AW: ValueListEditor
Hallo Delphinarium,
das mit der unnützen Schleife ist mir auch schon aufgefallen.
Delphi-Quellcode:
Memo1.Text := AktienName.Text; // Alle AktienNamen werden auf einmal ins Memo übertragen.
Ein weiterer Grund für mein Festhalten an Delphi7 ist eine kommerzielle Komponentenbibliothek von 'Epina' ( früher ?? )die ich mir vor Jahren gekauft hatte (Chart, Math und Base ohne Quellcode!! als vorkompilierte Packages) und die nur unter D7 läuft. Ich bin damit sehr zufrieden. Gruß Wolfgang |
AW: ValueListEditor
Ja, das ist immer ein Problemchen.
Das ist auch ein Grund, warum Viele versuchen nur noch Komponenten mit Sourcen zu benutzen/kaufen. Ist dann zwar meistens (erstmal) teurer, aber ... Teilweise kann man bei einigen Komponenten sie z.B. mit dem alten Delphi in eine DLL kompilieren und nutzt dann diese DLL im neuen Delphi, aber bei VCL-Komponenten ist das nicht so leicht. |
AW: ValueListEditor
Zitat:
Aber: et löppt. Und damit bin ich zufrieden :-) |
AW: ValueListEditor
Wo war nochmal das Beispiel, wo uralter TurboPascal-Code nahezu unverändert noch in aktuellem Delphi lief?
Damals bei TurboDelphi (2006). Gut, abgesehn von paar Dingen, welche zu viele Entwickler falsch gemacht haben (z.B. seit der WinNT weiterhin immer AdminRechte und beschreibbare ProgrammVerzeichnisse), ist Delphi an sich relativ unabhängig von Fremdkomponenten. (Gut, nicht ganz, aber auch in aktuelleren Delphis wird weiterhin versucht wieder Abstand von .NET und Co. zu nehmen) Probleme sind ja auch nicht nur die neuen IDEs, für alte DCUs/BPLs ohne PAS. Wenn der Komponenten-Entwickler plötzlich weg ist oder mit der Komponente aufhört oder man selber mal was bugfixen oder anpassen will/muß oder ... |
AW: ValueListEditor
Zitat:
Diese Regel hat sich über die Jahre immer wieder bestätigt und heute ist es für eine Firma, die Delphi einsetzt überlebensnotwendig, weil immer wieder die Hersteller von Komponenten einfach verschwinden (teilweise im Wortsinn aus"sterben"). |
AW: ValueListEditor
:thumb: Nie fremde Komponenten ohne Sourcen. Nie! (nie)
Analog zu einem anderen Spruch: Keine Sourcen kein Mitleid. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:21 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-2025 by Thomas Breitkreuz