Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Text in Checkbox oder Label anzeigen (https://www.delphipraxis.net/211499-text-checkbox-oder-label-anzeigen.html)

JimmyB 24. Sep 2022 18:13

Text in Checkbox oder Label anzeigen
 
Hallo allerseits,

ich habe die neue Anfrage in meiner vorherigen Anfrage gestellt, was verwirrend ist, weil es nicht mehr zum Titel passte. Darum habe ich einen neuen Post aufgemacht:

Der Plan ist einen Textdatei auszulesen.
Jede Zeile soll in einem eigenen Objekt (Checkbox, Label etc.) angezeigt werden.

Ich habe eine Reihe von Checkboxen angelegt und in den "Captions" möchte ich jeweils eine Zeile aus der Textdatei anzeigen.
Anders geschrieben, im Grunde ist es egal, in welchem Objekt ich die Zeilen jeweils anzeige. Wichtig ist, dass jede Zeile in einem eigenen Objekt (also nicht in einem Richtext Objekt gezeigt wird.
Der Plan ist das ich Checkbox1, Checkbox2 und so weiter, der Reihe nach hochzähle und dann jeweils in die Textzeile dort anzeige.

der Code, der so nicht funktioniert:


while NOT eof (myfile) do
begin
//Step 6: Get each line of text file into string variable
readln (myfile, sLine);

// work with sLine

var i : Integer;
i:=1;
for i := 1 to 10 do begin
checkbox+inttostr(i).Caption := sLine;



Mir gelingt es nicht eine Schleife zu erstellen, die den ausgelesenen Wert aus der Textdatei, in einer Checkbox angezeigt werden.

Vg JimmyB

KodeZwerg 24. Sep 2022 18:34

AW: Text in Checkbox oder Label anzeigen
 
Zur Lösung.

JimmyB 24. Sep 2022 18:57

AW: Text in Checkbox oder Label anzeigen
 
Hallo KodeZwerg,

danke für die Lösung und sieht komplizierter aus, als ich es mir vorgestellt hätte.
Ich werde es mir gleich ansehen und Rückmeldung geben, ob ich die Umsetzung hinbekommen habe.

Vg
JimmyB

Uwe Raabe 24. Sep 2022 20:57

AW: Text in Checkbox oder Label anzeigen
 
Das ist so nah wie möglich an deinem Code:
Delphi-Quellcode:
  var i: Integer;
  i := 1;

  while NOT eof (myfile) do
  begin
    //Step 6: Get each line of text file into string variable
    readln (myfile, sLine);

    // work with sLine

    (FindComponent('Checkbox' + IntToStr(i)) as TCheckBox).Caption := sLine;
    Inc(i);
  end;

himitsu 24. Sep 2022 21:13

AW: Text in Checkbox oder Label anzeigen
 
PS: Delphi-Referenz durchsuchenTFile.ReadAllLines

JimmyB 25. Sep 2022 09:39

AW: Text in Checkbox oder Label anzeigen
 
Hallo Uwe,

dein Code ist ja bestechend kurz. :thumb:
Ich habe diesen ausprobiert, allerdings scheint die Schleife nicht zu laufen.
Es wird nur die letzte Zeile aus der Textdatei in der Caption der ersten Checkbox angezeigt.



procedure TForm1.Button1Click(Sender: TObject);

// Step 1: Declare Varibales
var myfile : textfile;
sLine : string;
i : integer;
begin
//Check if the file exists
if not FileExists ('Fragen.txt') then
begin
showmessage ('Die Datei mit den Fragen kann nicht gefunden werden!');
Exit;
end;

//Step 3: Assign file to our variable
AssignFile( myfile, 'Fragen.txt');
i := 1;
//Step 4: Put the pointer at the top the textfile
reset (myfile);

//Step 5: Loop through our textfile
//Hint: Must use BEGIN and END

while NOT eof (myfile) do
begin
//Step 6: Get each line of text file into string variable
readln (myfile, sLine);

// work with sLine

(FindComponent('Checkbox' + IntToStr(i)) as TCheckBox).Caption := sLine;
Inc(i);
redDisplay.Lines.Add( sLine);
end; // end of while loop

//Step 7: Close our association
Closefile ( myfile);

end;

end.

vg JimmyB

JimmyB 25. Sep 2022 11:23

AW: Text in Checkbox oder Label anzeigen
 
Hallo KodeZwerg,
dein Vorschlag erzeugt einen E/A Fehler 104, heißt die Datei kann nicht zum lesen geöffnet werden. Daran arbeite ich gerade noch.

Zitat:

Zitat von KodeZwerg (Beitrag 1512382)
Zur Lösung.


himitsu 25. Sep 2022 11:31

AW: Text in Checkbox oder Label anzeigen
 
Möchtest du nicht lernen den einen Knopf mit dem Helm zu benutzen?
[DELPHI] ... [/DELPHI]

Man arbeitet niemals mit relativen Pfaden!!!
Bzw. man expandiert sie selber,
weil
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  SetCurrentDir('C:\');
  // das Programm muß beim Start garnicht im Arbeitsverzeichnis liegen (bzw. das Arbeitsverzeichnis muß nicht dem der EXE entsprechen)
  // und z.B. ein OpenDialog ändert auch gern das Arbeitsverzeichnis.
  if not FileExists('Fragen.txt') then
    ShowMessage('Peng');
Was heißt "scheibar"?

Was sagt denn der Debugger?
Haltepunkt vor die Schleife, mit [F9] starten und dann Zeilenweise [F8] nachsehen.


Und falls mal irgendwas schief geht, benutzt man immer einen Ressourcenschutzblock.
In Bezug auf die uralten Datei-Funktionen könnte man auch die Fehlerbehandlung abschalten, aber muß dann auch selber auf IOResult achten, also macht es keinen großen Unterschied.

Delphi-Quellcode:
AssignFile(myfile, ExtractFilePath(Application.ExeName) + 'Fragen.txt');
Reset(myfile);
try
  ...
finally
  Closefile(myfile);
end;
Delphi-Quellcode:
SL := TStringList.Create;
try
  SL.LoadFromFile(myfile, ExtractFilePath(Application.ExeName) + 'Fragen.txt');
  ...
finally
  SL.Free;
end;

Nja, viele Wege nach Rom .... ähhh, viele Funktionen/Klassen stehen zur Auswahl und hier mal die Aktuellste. :stupid:
(rate mal, warum ich so atomare Funktionen, wie Delphi-Referenz durchsuchenTFile.ReadAllLines TFile.ReadAllLines, mag ... schön kurz, automatische Speicherverwaltung und Fehlerbehandlung integriert)
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Lines: TArray<string>;
  i:    Integer;
begin
  if not FileExists(ExtractFilePath(Application.ExeName) + 'Fragen.txt') then
    raise Exception.Create('Die Datei mit den Fragen wurde nicht gefunden.');

  Lines := TFile.ReadAllLines(ExtractFilePath(Application.ExeName) + 'Fragen.txt');
  for i := 0 to High(Lines) do
    (FindComponent('Checkbox' + IntToStr(i)) as TCheckBox).Caption := Lines[i];
  redDisplay.Lines.AddAddStrings(Lines);
end;
Statt vieler TCheckBox nur eine TCheckListBox.
Delphi-Quellcode:
CheckListBox.Items.Clear;
CheckListBox.Items.AddAddStrings(Lines);
Oder wenn eh nur eine Antwort/Frage gewält werden kann,
dann TRadioButton, anstatt TCheckBox,
bzw. auch gleich eine TRadioGroup.

juergen 25. Sep 2022 11:45

AW: Text in Checkbox oder Label anzeigen
 
Hallo JimmyB,
bitte nutze doch in Zukunft bei Code die Delphi-Tags (dein Code markieren und dann Klick auf das Delphi-Symbol vom Editor). Es ist sonst schwierig den Code zu lesen.

Als Denkanstoß könnte dieser Code helfen. Voraussetzung ist, dass deine Checkboxen auch "Checkboxx" heißen. Das letzte x steht dabei für die Zahlen 1 oder 2 oder 3 usw.

Delphi-Quellcode:
PROCEDURE TForm2.Button1Click( Sender: TObject );
VAR
  i: Integer;
  sl: TStringList;
BEGIN
  IF FileExists( 'myFile.txt' ) THEN
  BEGIN
    sl := TStringList.Create;
    TRY
      sl.LoadFromFile( 'myFile.txt' );
      FOR i := 0 TO sl.Count - 1 DO
      BEGIN
        ( FindComponent( 'Checkbox' + IntToStr( i + 1 ) ) AS TCheckBox ).Caption := sl.strings[i];
      END;
    FINALLY
      sl.Free;
    END;
  END;
END;

himitsu 25. Sep 2022 12:30

AW: Text in Checkbox oder Label anzeigen
 
https://quality.embarcadero.com/browse/RSP-39531 :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:16 Uhr.
Seite 1 von 2  1 2      

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