![]() |
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 |
AW: Text in Checkbox oder Label anzeigen
Zur
![]() |
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 |
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; |
AW: Text in Checkbox oder Label anzeigen
|
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 |
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:
|
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:
Was heißt "scheibar"?
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 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-Quellcode:
Statt vieler TCheckBox nur eine TCheckListBox.
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;
Delphi-Quellcode:
Oder wenn eh nur eine Antwort/Frage gewält werden kann,
CheckListBox.Items.Clear;
CheckListBox.Items.AddAddStrings(Lines); dann TRadioButton, anstatt TCheckBox, bzw. auch gleich eine TRadioGroup. |
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; |
AW: Text in Checkbox oder Label anzeigen
|
AW: Text in Checkbox oder Label anzeigen
Zitat:
|
AW: Text in Checkbox oder Label anzeigen
Zitat:
Aber hier nun was mit Dateioperation:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var i, ii, MinCB, MaxCB : Integer; Component : TComponent; sl : TStrings; Duplicates : TDuplicates; Sorted, CaseSensitive: Boolean; begin // ein paar optionen für die string liste Duplicates := dupIgnore; // duplikate ignorieren Sorted := True; // die liste ist sortiert CaseSensitive := True; // groß/klein schreibung beachten // grundeinstellung über deine checkboxen MinCB := 1; // name der kleinsten checkbox wäre hiermit "CheckBox1" MaxCB := 2; // name der größten checkbox wäre hiermit "CheckBox2" // erstelle eine stringliste die auf den optionen aufbaut sl := TStringList.Create(Duplicates, Sorted, CaseSensitive); try try // lade eine datei im aktuellen verzeichniss der .exe sl.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Datei.txt'); ii := 0; // datei in checkbox splitten for i := MinCB to MaxCB do begin // finde eine passende checkbox Component := FindComponent('CheckBox' + IntToStr(i)); // stelle sicher das es wirklich eine gültige TCheckBox ist if ((Component <> nil) and (Component is TCheckBox)) then // sind wir immer noch im gültigen bereich if (ii < sl.Count) then begin // schubs eine textzeile in eine checkbox TCheckBox(Component).Caption := sl.Strings[ii]; Inc(ii); end else // wenn mehr checkboxen als textzeilen vorhanden sind... TCheckBox(Component).Caption := 'Leer #' + IntToStr(i); end; except // datei nicht gefunden // datei operation / oder andere fehler etc... end; finally sl.Free; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:10 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