Einzelnen Beitrag anzeigen

Raute50

Registriert seit: 12. Jan 2009
5 Beiträge
 
#18

Re: .txt in checklistbox anzeigen & angehakte zeilen lös

  Alt 12. Jan 2009, 16:53
Hallo phreax,

ich leider relativ unerfahren im Umgang mit Pascal, aber arbeite gerade dran, das zu ändern.

Momentan habe ich ein Problem, welches Du eventuell lösen kannst, da Du im dem Thread
(http://www.delphipraxis.net/internal...t.php?t=109992)
den folgenden Beitrag geschrieben hast:

Zitat von phreax:
Hallo violinplayer

Also das ganze ist relativ simpel, denn die Cheklistbox Items sind ja berteits eine StringList also muss man die checkbox nur durchgehen und gucken ob ein item selected ist, dann dieses löschen.
Komplex wird das ganze erst durch dei daraus resultierende Indexverschiebung, weshalb das ganze nicht so leicht mit einer for Schleife gelöst wrden kann (Kannst es ja mal probieren ).

Hier das ganze als Codebesipiel, aber bitte bnicht nur Copy & Paste, wenn du den Code nicht verstehst dann frag einfach nach.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var I: Integer;
begin
I := 0; //inistialisieren
while CheckListBox1.Items.Count > I do //Damit .Count immer wieder aktualisiert wird
 if CheckListBox1.Checked[I] then
   CheckListBox1.Items.Delete(I) else Inc(I); //weil der Index "nachruchtscht"
end;
Grüße Phreax

Mein Problem ist jetzt:
ich habe eine CheckListBox:
CheckListBox := TNewCheckListBox.Create(MyCheckListPage); Diese enthält (ähnlich wie im obigen Thread) einige Einträge. Wieviel das sind und wie die aussehen, weiß ich erst zur Laufzeit.
Das Erstellen klappt m.E. ganz gut, nur möchte ich auslesen, welche CheckListBox ausgewählt wurde.

Irgendetwas wie:
Delphi-Quellcode:
      if MyCheckListPage.Values[i] = true; then
        NewString[i] := 'ja';
Du hattest dazu etwas geschrieben, was ich nicht ganz verstehe.


Ich arbeite mit InnoSetup, wo man in der [Code] Sektion selber Pascal Code schreiben kann.

Habe versucht Deine Hilfe so umzusetzen:
Delphi-Quellcode:

function NextButtonClick(CurPageID: Integer): Boolean;
var
  text: String;
  NewString: TArrayOfString;
begin

  if CurPageID = MyCheckListPage.ID then
  begin
    setArrayLength(NewString, upperBound);
    // ** Wenn Haken gesetzt, dann ja in Array ... ansonten ''
    for i:= 0 to upperBound-1 do
    begin
      if CheckListBox.Checked[i] = true then
      begin
        MsgBox('i = ' + IntToStr(i), mbInformation, MB_OK);
        NewString[i] := 'ja';
      end;
    end;
  end;
Jedoch ist die if-Bedingung nie war.

Inwiefern ich die procedure TForm1.Button1Click(Sender: TObject); einbauen kann, ist mir leider auch nicht klar.
Ich kenne nur die NextButtonClick-Funktion von InnoSetup

Weitere Einstellungen, die ich vorgenommen habe:

Delphi-Quellcode:
  MyCheckListPage := CreateCustomPage(wpWelcome, 'Bitte suchen Sie sich etwas aus:',
            'Alles möglich!:');

  CheckListBox := TNewCheckListBox.Create(MyCheckListPage);
// CheckListBox2 := TNewCheckListBox.Create(MyCheckListPage);
  CheckListBox.Width := MyCheckListPage.SurfaceWidth;
  CheckListBox.Height := MyCheckListPage.SurfaceHeight;
  CheckListBox.Flat := False;
  CheckListBox.Parent := MyCheckListPage.Surface;
  CheckListBox.AddCheckBox('HauptBox 1', 'das hier ist wichtig!', 0, True, True, False, False, nil);
  CheckListBox.Checked[0] := True;

  if upperBound > 0 then
  begin
    CheckListBox.AddCheckBox('HauptBox 2', 'das hier ist auch wichtig!', 0, True, True, False, False, nil);
    for i:= 0 to upperBound-1 do
    begin
      CheckListBox.AddCheckBox(MyArray[i],
                      '', 1, True,True, False, True, nil);
      CheckListBox.Checked[i+1] := true;
    end;
  end;

Ich hoffe bei Dir an der richtigen Stelle zu sein, da mich das Problem langsam zum Verzweifeln bringt.

Solltest Du irgendwelche hilfreichen Ratschläge haben, würde ich mich sehr über eine Reaktion freuen!



In diesem Sinne ... schöne Grüße!
#50
  Mit Zitat antworten Zitat