![]() |
AW: Elemente aus TStringList in Laufzeit entfernen
Zitat:
Code:
Aber wie deklarier ich das, sie enthält ja Strings und Integer-Werte?
List.Add(Vocab);
|
AW: Elemente aus TStringList in Laufzeit entfernen
Als aller erstes musst du verstehen, dass du deine TStringList nur brauchst, um TList zu befüllen. Danach brauchst du die TStringListe nie wieder. Alles weitere passiert über die TList wo du ja schon jetzt alle deine Vokabeln samt Zähler drin hast.
|
AW: Elemente aus TStringList in Laufzeit entfernen
Die Liste funktioniert jetzt schon, ich kann sie aber nicht füllen.
Sie ist deklariert als:
Delphi-Quellcode:
Wenn ich ihr aber die Vokabeln zuweise sagt der Compiler "Incompatible types: Pointer and TForm2.TVocab"
var List: TList;
Delphi-Quellcode:
List.Add(Vocab);
|
AW: Elemente aus TStringList in Laufzeit entfernen
das geht ungefähr so:
Delphi-Quellcode:
ohne Gewähr da nur so runter getippt;
type
myrecord=engtext:string; gertext:string; Repetition:integer; end; var pmyrecord=^myrecord; ..... new(pmyrecord); pmyrecord^.engtext:=Englischertext; pmyrecord^.gertext:=Deutschertext; pmyrecord^.Repetition:=3; liste.add(pmyrecord); .... procedure ListFree; var pmyrecord:^myrecord; begin for i:=0 to liste.count-1 do begin pmyrecord:=liste.item[i]; dispose(pmyrecord); end; liste.free; //der freeandnil falls auf Nil getestet wird end; Gruß K-H |
AW: Elemente aus TStringList in Laufzeit entfernen
Wenn dann so :P
Delphi-Quellcode:
type
pmyrecord = ^myrecord; myrecord = record engtext: string; gertext: string; Repetition: integer; end; |
AW: Elemente aus TStringList in Laufzeit entfernen
*entfernt*
|
AW: Elemente aus TStringList in Laufzeit entfernen
Zitat:
gruß K-H |
AW: Elemente aus TStringList in Laufzeit entfernen
Danke für den Code aber ich blicke immer noch nicht durch :cry:
Delphi-Quellcode:
pmyrecord = ^myrecord; // Record declarieren. Aber warum auf einmal das "^" Zeichen? myrecord = record // festlegen, dass ich ein Record verwenden will? engtext: string; //"Container" für die englischen Vokabeln, richtig? gertext: string; //"Container" für die deutschen Vokabeln, richtig? Repetition: integer; //"Container" für die Wiederholungen, richtig?
Delphi-Quellcode:
var
new(pmyrecord); //Was ist das? pmyrecord^.engtext:=Englischertext; // müsste das nicht heißen: pmyrecord^.engtext:= Vocabulary.Names[i]; pmyrecord^.gertext:=Deutschertext; // müsste das nicht heißen: pmyrecord^.gertext:= Vocabulary.ValueFromIndex[i] pmyrecord^.Repetition:=3; |
AW: Elemente aus TStringList in Laufzeit entfernen
Liste der Anhänge anzeigen (Anzahl: 1)
Hmm..
(Wieso immer mit Records bei Listen gearbeitet wird... ;) ) Angehängt ein 'einfaches' Beispiel, wie mann mit einer TObjectList und einer Klasse für die Vokabeln einen einfaches Übungsprogramm machen kann. Inklusive der Option, das eine falsche Lösung 3x für das Wort wiederholt werden kann und es erst dann aus der Liste entfernt wird. Auf grafische Spielereien habe ich zunächst verzichtet, da es nur um die 'Funktion' als Beispiel geht... Viel Spaß damit.. ( Mit D6 mal so zusammen getippt ;) ) |
AW: Elemente aus TStringList in Laufzeit entfernen
Also einfach sieht für einen Anfänger bestimmt anders aus :P
Dafür ist es aber korrekt und der richtige Weg. |
AW: Elemente aus TStringList in Laufzeit entfernen
Zitat:
Ist aber vielleicht auch der Vorstellung geschuldet, daß ein Object komplexer ist als ein Record? Gruß K-H |
AW: Elemente aus TStringList in Laufzeit entfernen
Zitat:
Meinetwegen mit classes. Ich hab versucht das Programm bei mir zu implementieren. Da gibt es gleich den ersten Fehler. Compiler meint TVocableList ist nicht deklariert. Dabei stehts aber drinne.
Delphi-Quellcode:
Oder wenn Records einfacher sind, kann jemand das Programm für records umschreiben?
private
{ Private declarations } public { Public declarations } FWordCount : integer; FWordCorrect : integer; FRandomNumber : integer; FVocableList : TVocableList; end; var Vocabulary: TStringList; RandomNumber, Abfragen: Integer; jpgFlag, jpgCorrect, jpgWrong: TJpegImage; StartTime: TDateTime; Duration: TDateTime; end; |
AW: Elemente aus TStringList in Laufzeit entfernen
Zitat:
Korrekt heißt es übrigens mit Klassen. Auch wenn sich classes cooler anhört. Zitat:
|
AW: Elemente aus TStringList in Laufzeit entfernen
Hmm..
und wenn Du dir die Units angesehen hättest, dann währe dir die Unit UVocableList aufgefallen, diese enthält die Classendeclarationund die TVocableList. So ist nicht alles in die Unit der Form geklatscht... Zitat:
constructor/functionen und so weiter... Ich finde Klassen sauberer, da es ein 'create' / Benutzten und definiertes 'Free' gibt.. Bei Records sind diese mit der Variablendeklaration 'einfach' da.. (OK, wenn man nicht gerade mit Pointer auf Record arbeitet) Und wenn der Scope weg ist, dann sind diese (hoffentlich) auch wieder sauber weg ;) Durch die Verwendung der ObjectList habe hier in diesem Beispiel nur das Herumkopieren von Array Teilen beim Löschen von Elementen mitten heraus umgangen... Auch kümmert diese sich sauber um das Löschen der Objecte.. Im Beispiel habe ich dann nur noch das Visuelle in eigene Proceduren ausgelagert, weil ich keine langen Spaghetticode mag.. ;) |
AW: Elemente aus TStringList in Laufzeit entfernen
Zitat:
Alle Leute die dir bisher geholfen haben sind nicht auf müssen aus und denen ist es egal ob du das in der nächsten Woche fertig haben musst. Die machen es auf freiwilliger Basis. Ein müssen seitens der Helfenden Hände hier gibt es nicht! gruss |
AW: Elemente aus TStringList in Laufzeit entfernen
Klare Worte müssen ab und zu auch mal sein.
Klingt vielleicht hart, aber es ist die Wahrheit. Häng dich rein, dann hast du nächste Woche den technisch wohl besten Vokabeltrainer der ganzen Klasse. |
AW: Elemente aus TStringList in Laufzeit entfernen
Ich hab jetzt wirklich viele Stunden versucht @HolgerX QUellcode zu verstehen und auch die Erklärung zu Klassen im Delphi Treff gelesen.
Aber an dem Punkt an dem ich gemerkt habe, dass Klassen auch so was wie Prozeduren sind bin ich ausgestiegen. Deswegen will ich jetzt noch mal komplett von vorne anfangen und das Ganze mit Records aufbauen. Soweit bin ich mit den Erklärungen vom Delphi Treff gekommen (sieht auch Euren Vorschlägen ähnlich). Wenn ich aber meinem Record VocabularyList.German seine Vokabeln zuordnen will meckert der Compiler: Incompatible types TStringList and string.
Delphi-Quellcode:
Jemand ne Idee warum er das macht?
type
TForm1 = class(TForm) Button1: TButton; Panel1: TPanel; Panel2: TPanel; Panel3: TPanel; Panel4: TPanel; Panel5: TPanel; Panel6: TPanel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; type TVocabulary = record German : TStringList; English : TStringList; Repetitions : Integer; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var VocabularyList: TVocabulary; Vocabulary: TStringList; index: Integer; begin Vocabulary.LoadFromFile('Vocabulary.text'); for index:= 0 to Vocabulary.Count -1 do begin VocabularyList.Repetitions:= 3; VocabularyList.German:= Vocabulary.ValueFromIndex[index]; VocabularyList.English:= Vocabulary.Names[index]; end; end; |
AW: Elemente aus TStringList in Laufzeit entfernen
Hmm..
Was für ein Kuddelmuddel! ;) Letzter Versuch meiner seits... Zitat:
Wenn hier im Thread von Records gesprochen wurde, dann sind diese 'Records' jeweis 'ein' Datensatz in der Liste. Somit
Delphi-Quellcode:
Dies geht übrigens auch als Classe (Object):
TVocabulary = record
German : String; English : String; Repetitions : Integer; end;
Delphi-Quellcode:
Egal ob ObjectList oder StringList, dies sind 'Listen' welche Datensätze (Objecte) enthalten.
TVocabulary = class
German : String; English : String; Repetitions : Integer; end; Alternativ kannst Du auch ein
Delphi-Quellcode:
verwenden.
TVocabularyList = Array of TVocabulary
Jedoch ist das Löschen von einem Datensatz in diesem Array etwas aufwändiger als bei einer ObjectList. Denn dann musst Du die verbleibenden Einträge in deinem Array in ein neues, verkleinertes umkopieren und nur den zu löschenden weglassen.. Ich hatte in meinem Beispiel TObjectList verwendet mit Objecten, statt Records, da da die Bearbeitung (löschen) einfach geht. Hier kümmert sich die TObjectList selber um das Händling.. In meiner Unit habe ich nur die TObjectList leicht geändert/erweitert, um einfacher auf die Objecte zugreifen und hinzufügen zu können. Ich werde Dir hier nun kein Beispielprogramm mit Arrays vorkauen... |
AW: Elemente aus TStringList in Laufzeit entfernen
:thumb:
Gut erklärt! Gruß K-H |
AW: Elemente aus TStringList in Laufzeit entfernen
Zitat:
Zitat:
Holgers Ansatz war mehr als in Ordnung. Wieso wirfst den einfach weg und fängst schon wieder mit deiner komischen StringListe an? Ließ doch mal was die Leute dir schreiben. Zitat:
|
AW: Elemente aus TStringList in Laufzeit entfernen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:15 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