Seite 1 von 1

Custom Form: SetVarContent dynamisch befüllen?

Verfasst: Mi Mär 13, 2019 9:55 am
von Lukas Stelter
Guten Tag,

ich habe ein Problem bezüglich das befüllen einer Variable mit mehreren Werten.
Ähnlich wie in Ihrem Beispiel zur Custom Form habe ich mir eine Liste aus der Datenbank auslesen lassen und mit diesen eine CheckBoxList befüllt.
Die Liste hat am ende ca 300 Einträge.
Nun möchte ich eine Variable mit den Werten befüllen die angekreuzt sind.
Problem hierbei ist, dass nur der letzte angekreuzte Wert in die Variable geschrieben wird.
Ist es möglich das Problem über SetVarContent zu lösen?

Danke im Voraus :D

Lukas Stelter

Hier mein Ansatz:

Code: Alles auswählen

procedure OkButtonClick(Sender: TObject);  
var    
i: integer;                  
begin
for i:=0 to CheckListBox1.Items.Count-1 do
if (CheckListBox1.Checked[i] = True) then                                                
begin                                                                                  
[b]SetVarContent('VARIABLE1', CheckListBox1.Items[i] + '=' + inttostr(CheckListBox1.Checked[i]));                                                                                                       
end;                                                                                                         
  CloseForm(0);                                                                                                                
end;                                       
 

Re: Custom Form: SetVarContent dynamisch befüllen?

Verfasst: Mi Mär 13, 2019 12:14 pm
von gfortkort
Guten Tag,

in deinem Code wird bei jedem Durchlauf die VARIABLE1 komplett überschrieben.
Hier kann eine Hilfsvariable verwendet werden, welche zum Schluss einmalig in die VARIABLE1 geschrieben wird.
Folgend ein Beispiel Code:
procedure OkButtonClick(Sender: TObject);
var
i: integer;
temp: string;
begin
temp := '';
for i := 0 to CheckListBox1.Items.Count - 1 do
begin
if CheckListBox1.Checked then
begin
temp := CheckListBox1.Items + '=1,' + temp;
end;
end;

SetVarContent('VARIABLE1', temp);
CloseForm(0);
end;

Re: Custom Form: SetVarContent dynamisch befüllen?

Verfasst: Mi Mär 13, 2019 1:10 pm
von Lukas Stelter
Danke für die schnelle Antwort :D

Wenn ich es über diesen Weg probiere erscheint folgende Fehlermeldung:
File Library FormUnit: Variante des Typs (UnicodeString) konnte nicht in Typ (Double) konvertiert werden when evaluating instruction OperAdd($0,$0,$0,$0,'').
Stack content is: [Integer:221103776,Integer:802990192].
Source position: 20,35
Source Postion ist die Zeile:
temp := CheckListBox1.Items + '=1,' + temp;
Verwende ich hier einen falschen Datentypen?

Re: Custom Form: SetVarContent dynamisch befüllen?

Verfasst: Mi Mär 13, 2019 2:18 pm
von ngottschalk
Hallo Lukas,

ich habe es zwar nicht getestet, aber das "CheckListBox1.Items" ist meiner Meinung nach falsch, weil es eine StringList o.Ä. sein sollte. Da du an dieser Stelle aber wahrscheinlich den Text der Zeile haben möchtest, müsste hier noch irgendwo zumindest der Index "i" untergebracht werden. Es ist wahrscheinlich "CheckListBox1.Items\[i\]", ggf. musst du aber noch je nach Aufbau hier auf eine Text-Property zugreifen ("CheckListBox1.Items\[i\].Text" oder ähnlich).
Wie gesagt, nicht getestet, nur vermutet.

PS: Neue Vermutung: Der eigentlich gepostete Code war richtig, nur wurde der Index "\[i\]" von der Forensoftware als Tag für Kursivschrift interpretiert^^

PPS: Die "\" bei den Indexen natürlich entfernen, wollte nur verhindern, dass es bei mir auch als kursiv interpretiert wird.

Re: Custom Form: SetVarContent dynamisch befüllen?

Verfasst: Mi Mär 13, 2019 3:09 pm
von DRuppertz
Hallo,

das Problem war, wie von Niklas beschrieben, die Interpretation von Teilen des Codes für die Formatierung des Text als Kursiv.
Den Code finden Sie anbei in der Code.zip.
Ich habe ich den Code noch so angepasst, dass die Auflistung auch mit der gleichen Reihenfolge wie in der CheckListBox gespeichert wird.

Re: Custom Form: SetVarContent dynamisch befüllen?

Verfasst: Mi Mär 13, 2019 3:38 pm
von Lukas Stelter
Es funktioniert, vielen Dank! :D