Delphi-PRAXiS
Seite 7 von 11   « Erste     567 89     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Elemente aus TStringList in Laufzeit entfernen (https://www.delphipraxis.net/198592-elemente-aus-tstringlist-laufzeit-entfernen.html)

KetchUp 20. Nov 2018 20:41

AW: Elemente aus TStringList in Laufzeit entfernen
 
Zitat:

Zitat von haentschman (Beitrag 1418495)
Da keine Rückfrage aufgekommen ist, die Frage, ob du das:
...gelesen hast?

Deinen Post hab ich gelesen aber nicht den ganzen Styleguide. Ich stimme auch allen Punkten zu nur die Bezeichnung "L_CorrectAnswer" sollen wir so machen. Das L steht für "Label". Mit dem Unterstrich finde ich es besser lesbar, das war also mein "Verschulden".

Den Code schau ich mir erst morgen wieder an, muss noch lernen. Es sieht ja aus als komme ich um Record oder Classes nicht drum herum.

haentschman 21. Nov 2018 06:47

AW: Elemente aus TStringList in Laufzeit entfernen
 
Moin...8-)

...alles gut. Mir ging es darum, daß man sich nicht was angewöhnt was später hinderlich ist, wenn man z.B. in ein neues Team wechselt. :wink:

EWeiss 21. Nov 2018 07:13

AW: Elemente aus TStringList in Laufzeit entfernen
 
Zitat:

"L_CorrectAnswer" sollen wir so machen. Das L steht für "Label".
Sehe persönlich kein Problem dabei..
Ich benenne meine Labels auch mit einer Abkürzung davor lblCorrectAnswer wie man es macht bleibt jedem selbst überlassen.
Letztendlich musst du selbst damit klar kommen.

gruss

KodeZwerg 21. Nov 2018 08:21

AW: Elemente aus TStringList in Laufzeit entfernen
 
Liegt an der Art und Weise wie es einem beigebracht / vorgeschrieben wird.
Ich hab auch für labels die ich während der Laufzeit ändern muss ein "lblName" da bei mir "LName" für Lokale Dinge stehen :)

An TE: Ich find es Klasse das Du Dir alles selbst erarbeiten und nichts fertiges benutzen möchtest!
Aber den Tipp es über Klassen oder mindestens einen Record laufen zu lassen, darüber würde ich nochmal nachdenken.
Mit dem Record ist am einfachsten in Deinem Falle zu übertragen/anzuwenden/einzubauen.
Ist ja keine Kopie da Du kompletten Source dafür selbst noch anpassen müsstest wobei wir gerne helfen können :-)

KetchUp 21. Nov 2018 19:18

AW: Elemente aus TStringList in Laufzeit entfernen
 
Ok, ich versuch das jetzt mit Records. Ein Record scheint ja einfach nur den Variablennamen mit einem T davor als Datentyp zu haben. Ich hab das global so Deklariert

Delphi-Quellcode:
   
var
  VocabLanguage: TVocabLanguage;
Compiler meckert aber. "Undeclared identifier" Wie muss ich es denn richtig machen?

Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
var
  i: Integer;

begin
  Vocabulary:= TStringList.Create;
  Vocabulary.LoadFromFile('Vocabulary.txt');

  RandomNumber:= random(Vocabulary.Count);
  L_RemainingWords.Caption:= 'Verbleibende Vokabeln: '+IntToStr(Vocabulary.Count);

  If GermanEnglish

  Then
    try
      L_HeadingTrainerDescription.Caption:= 'Deutsch -> Englisch | '+IntToStr(Repititions)+' Wiederholungen | 10 Vokabeln';

      for i:= 0 to Vocabulary.Count - 1 do
        Begin
          VocabLanguage = record
          VocabLanguage:= TVocabLanguage.Create;
          VocabLanguage.English:= Vocabulary.Names[i]
          VocabLanguage.German:= Vocabulary.ValueFromIndex[i]
          VocabLanguage.SolvedCount:= 0;
          L_UnknownWord.Caption:= VocabLanguage.English[RandomNumber];
          L_CorrectAnswer.Caption:= '';
        End;
      finally
    end

DieDolly 21. Nov 2018 19:29

AW: Elemente aus TStringList in Laufzeit entfernen
 
Zitat:

Ok, ich versuch das jetzt mit Records. Ein Record scheint ja einfach nur den Variablennamen mit einem T davor als Datentyp zu haben
Hättest du dir mein Beispiel vor langer Zeit wenigstens angeguckt dann wüsstest du, dass das nicht der Wahrheit entspricht.

Ruder mal ein paar Seiten zurück und ließ dir alles durch was du finden kannst.

KetchUp 21. Nov 2018 22:01

AW: Elemente aus TStringList in Laufzeit entfernen
 
Ok, Deklaration klappt.

Delphi-Quellcode:
  private
    { Private declarations }
  public
    { Public declarations }
  type
    TVocab = record
    German, English: string;
  end;

  var
    Vocab: TVocab;
    Vocabulary: TStringList;
    RandomNumber, Abfragen: Integer;
    jpgFlag, jpgCorrect, jpgWrong: TJpegImage;
    StartTime: TDateTime;
    Duration: TDateTime;
  end;
So ganz Unrecht hatte ich nicht, musste nur type auf record setzen.

Delphi-Quellcode:
  If GermanEnglish

  Then
    try
      L_HeadingTrainerDescription.Caption:= 'Deutsch -> Englisch | '+IntToStr(Repititions)+' Wiederholungen | 10 Vokabeln';

      for i:= 0 to Vocabulary.Count - 1 do
        Begin
          Vocab:= TVocab.Create;
          Vocab.English:= Vocabulary.Names[i];
          Vocab.German:= Vocabulary.ValueFromIndex[i];
          Vocab.SolvedCount:= 0;
          L_UnknownWord.Caption:= Vocab.English[RandomNumber];
          L_CorrectAnswer.Caption:= '';
        End;
      finally
    end
Jetzt hängt es am "TVocab.Create;". Das verstehe ich noch nicht.

DieDolly 21. Nov 2018 22:23

AW: Elemente aus TStringList in Laufzeit entfernen
 
Records alleine bringen dir nichts. Du brauchst auch eine Liste wo du die reinstecken und von abfragen kannst.

KodeZwerg 21. Nov 2018 22:44

AW: Elemente aus TStringList in Laufzeit entfernen
 
Als kleine Gedankenstütze, diesen Tipp mit Records meinte ich, damit es keine Kopie wird benenn halt alles um aber bleibe beim Konstrukt, das wäre eine gute Ausgangslage.

Zitat:

Zitat von p80286 (Beitrag 1418489)
Dann versuche ich mal eine Erklärung.
Du hast eine Vokabel und die zugehörige Übersetzung. Weiterhin benötigst Du eine Zählung für die korrekte Übersetzung.
Du könntest mit drei Arrays (Vokabel,übersetzung,zählung) arbeiten. Das ist aber arg aufwendig und fehleranfällig. Eine andere Möglichkeit wäre es ein Record zu nutzen z.b.
Delphi-Quellcode:
type
myrecord = record
             Vokabel : string;
             Uebersetzung : string;
             Zaehler : integer;
          end;
In diesem Falle hast Du alle notwendigen Daten in einem Datensatz zusammen gefasst. Da hast Du keinen Aufwand mit der Synchronisation.
Jetzt packst Du die Records noch in eine Liste, die nicht nur die Daten sondern auch alle notendigen Funktionen enthält und Das halbe Programm ist fertig.
Die andere Hälfte ist die Darstellung und die Benutzereingaben. Mit den Daten hast Du dann nichts mehr zu tun, da die Auswahl der Datensätze, die Zählung, die Initialisierung etc. in der Liste enthalten sind.

Gruß
K-H


KetchUp 22. Nov 2018 15:46

AW: Elemente aus TStringList in Laufzeit entfernen
 
Das ist mein momentaner Stand.
Delphi-Quellcode:
  private
    { Private declarations }
  public
    { Public declarations }
  type
    TVocab = record
    German, English: string;
    Repetitions: Integer;
  end;
Delphi-Quellcode:
          Input:= E_UserGuess.Text;
          E_UserGuess.Text:= '';

          Answer:=AnsiCompareStr(Vocabulary.Names[RandomNumber], Input);

          If Answer=0
          Then   //Antwort ist richtig
            Begin
              L_CorrectAnswer.Caption:='';
              Img_FeedBack.Picture.Bitmap.Assign(jpgCorrect);
              //Vocabulary.Delete(RandomNumber);
              Vocab.Repetitions[RandomNumber]:= Vocab.Repetitions[RandomNumber] - 1;
            End

          Else   //Antwort ist falsch
            Begin
              L_CorrectAnswer.Caption:='Richtig wäre: '+(Vocabulary.Names[RandomNumber]);
              Img_FeedBack.Picture.Bitmap.Assign(jpgWrong);
              Vocab.Repetitions[RandomNumber]:= RepititionValue;

            End;
Jetzt kann ich meine Zufallszahl nicht mehr nutzen. Compiler sagt Array type required.
Meinst du mit in Liste packen sowas: List.Add(Vocab);?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 Uhr.
Seite 7 von 11   « Erste     567 89     Letzte »    

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