Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi CheckListBox und Memo verwenden (https://www.delphipraxis.net/136404-checklistbox-und-memo-verwenden.html)

Kunoishi 29. Jun 2009 22:40


CheckListBox und Memo verwenden
 
ihr habt mir bestens geholfen bei dem Thema CheckListBox
nun habe ich eine weiter frage
ich habe euer beispiel eingesetzt
Delphi-Quellcode:
procedure TSachverhaltForm.AnzeigengrundBoxClick(Sender: TObject);
var
  I: Integer;
  s: String;
begin                                              
  S:='';
  with AnzeigengrundBox do
    for I:= 0 to Count - 1 do
     if Checked[i] then
      if s='' then s:= Items[i]
        else S:= s +', ' +Items[i];
   EditAnzeigengrund.Text:=(s);
end;
hierzu ist mein String
Blume
Wasser
Erde
Sand
Dünger
Licht
Schatten

wie schaffe ich es jetzt, dass bei auswahl in meinem checklistBox
ich in einem Memofeld eine info zur Blume kommt wenn ich auf blume tippe

oder wenn ich auf wasser tippe ich eine info im Memofeld zu wasser bekomme.
das ganze in ein und dem Selben Memofeld ohne das der inhalt der vorrangegangen auswahl stehen bleibt?

Luckie 29. Jun 2009 22:43

Re: CheckListBox und Memo verwenden
 
Dann lösch den Inhalt des Memofeldes doch vorher wieder mit der Methode TMemo.Clear.

Kunoishi 29. Jun 2009 22:45

Re: CheckListBox und Memo verwenden
 
mm ich bekomme aber immer nur den inhalt vom blumentext auf das memo
auch wenn ich auf wasser oder luft gehe
warum

Luckie 29. Jun 2009 22:50

Re: CheckListBox und Memo verwenden
 
Ich glaube, du solltest dein Problem mal etwas deutlicher beschreiben. Aus diesen Satzfetzen kann man dein Problem nicht wirklich erkennen. Ganze Sätze und vorheriges Nachdenken, wo dein Problem überhaupt liegt würde es wesentlich einfacher machen.

Wo kommen denn eigentlich die weiteren Informationen zu den Einträgen her?

Kunoishi 29. Jun 2009 22:54

Re: CheckListBox und Memo verwenden
 
mm ich versuche es dann mal anders

ich habe diese 7 Strings, Blume, luft, wasser
und ich schaffe es nicht das ich dazu ein jeweiliges Memo aufbekomme
wo zu jedem string eine Info hinterlegt sein soll.

ich hoffe das war jetzt besser :-)

jaenicke 29. Jun 2009 22:59

Re: CheckListBox und Memo verwenden
 
Was hat das denn mit dem Quelltext oben zu tun? Und wofür brauchst du da eine CheckListBox? Dafür reicht doch eine normale ListBox, bei der du den aktuell ausgewählten Eintrag (in ListBox.ItemIndex) benutzt.

Woher sollen denn die Zusatzinfos kommen? Aus einer Datei, ins Programm einprogrammiert, ...

Kunoishi 29. Jun 2009 23:02

Re: CheckListBox und Memo verwenden
 
das ChecklistBox ding wollte ich nehmen weil es übersichtlicher ist und besser anspricht
daher kam die Idee

jaenicke 29. Jun 2009 23:05

Re: CheckListBox und Memo verwenden
 
Du hast aber immer noch nichts dazu gesagt woher denn die Infos kommen sollen.

Der Möglichkeiten gibt es viele, von einem konstanten Array über Ressourcen bis hin zu externen Dateien. :stupid:

Luckie 29. Jun 2009 23:06

Re: CheckListBox und Memo verwenden
 
Noch mal: WO kommen denn die zusätzlichen Infos her?

Meinst du sowas:
Delphi-Quellcode:
procedure TForm3.CheckListBox1Click(Sender: TObject);
begin
  if CheckListBox1.ItemIndex > -1 then
  begin
    Memo1.Clear;
    Memo1.Text := CheckListBox1.Items[CheckListBox1.ItemIndex];
  end;
end;

procedure TForm3.FormCreate(Sender: TObject);
begin
  ChecklistBox1.Items.Add('Blume');
  ChecklistBox1.Items.Add('Wasser');
  ChecklistBox1.Items.Add('Luft');
  ChecklistBox1.Items.Add('Licht');
end;

Zitat:

Zitat von jaenicke
Du hast aber immer noch nichts dazu gesagt woher denn die Infos kommen sollen.

Der Möglichkeiten gibt es viele, von einem konstanten Array über Ressourcen bis hin zu externen Dateien. :stupid:

Ich glaube, das bekommen wir nur mit der chinesischen Wasserfolter aus ihm raus. ;)

Kunoishi 29. Jun 2009 23:08

Re: CheckListBox und Memo verwenden
 
scheinbar stehe ich heut auf der leitung

sorry (meine frau sagte mir heut auch schon das sie es nicht einfach mit mir hat)

ich wollte die texte für die Memos in Strings hinterlegen wenn das geht

Kunoishi 29. Jun 2009 23:14

Re: CheckListBox und Memo verwenden
 
oder anders ausgedrückt

Delphi-Quellcode:
( Blume) Memo1.Text := "ich bin eine Tulpe";
( Wasser) Memo2.Text := "brauche wenig wasser";
(Licht) Memo3.Text :=" aber viel licht;

  ChecklistBox1.Items.Add('Blume');
  ChecklistBox1.Items.Add('Wasser');
  ChecklistBox1.Items.Add('Luft');
  ChecklistBox1.Items.Add('Licht');
das war mein ansatz :-(

Luckie 29. Jun 2009 23:15

Re: CheckListBox und Memo verwenden
 
Da kommen wir der Sache doch schon näher:
Delphi-Quellcode:
var
  Info: array[0..3] of String = ('Zusatzinfos zu Blumen', 'Zusatzinfos zu Wasser', 'Zusatzinfos zu Luft',
    'Zusatzinfos zu Licht');

procedure TForm3.CheckListBox1Click(Sender: TObject);
begin
  if CheckListBox1.ItemIndex > -1 then
  begin
    Memo1.Clear;
    Memo1.Text := Info[CheckListBox1.ItemIndex];
  end;
end;
Vorraussetzung ist, dass die Reihenfolge identisch ist. Man könnte jetzt die Zusatzinfos als Objekt an die Listbox-Eintäge hängen, aber ich glaube, das übersteigt deinen Kenntnisstand noch etwas. Vorteile aber wäre, dass man die Einträge sortieren könnte, ohne Rücksicht auf das Array mit den Daten nehmen zu müssen.

Du brauchst nicht für jeden Eintrag ein Memo.

Kunoishi 29. Jun 2009 23:22

Re: CheckListBox und Memo verwenden
 
das ist ja auch wieder eine verbesserung wenn ich nur ein Memo brauch
klasse.

schuldigung noch mal für meine komplizierte ausdrucksweise :-)

Luckie 29. Jun 2009 23:27

Re: CheckListBox und Memo verwenden
 
Zitat:

Zitat von Kunoishi
schuldigung noch mal für meine komplizierte ausdrucksweise :-)

Vollständige Sätze, korrekte Rechtschreibung und korrekte Groß- und Kleinschreibung würden schon viel zum Verständnis beitragen.

Popov 29. Jun 2009 23:50

Re: CheckListBox und Memo verwenden
 
:Kunoishi

Eigentlich ist das was du willst nicht schwer, aber ich weiß nicht ob du den Code verstehst;

Delphi-Quellcode:
type
  TData = class
    Zusatztext: String;
  end;

procedure TForm1.FormCreate(Sender: TObject);

  procedure Hinzu(Text, Zusatztext: String);
  var
    Data: TData;
  begin
    Data := TData.Create;
    Data.Zusatztext := Zusatztext;
    ListBox1.Items.AddObject(Text, Data);
  end;

begin
  Hinzu('Blume', 'Blumen blühen');
  Hinzu('Wasser', 'Wasser ist feucht');
  Hinzu('Erde', 'In der Erde wachsen Erdäpfel');
  Hinzu('Sand', 'Sand ist voller Sand');
  Hinzu('Dünger', 'Dünger düngt die Erde');
  Hinzu('Licht', 'Licht spendet Wärme');
  Hinzu('Schatten', 'Im Schatten ist es kühler');
end;

procedure TForm1.ListBox1Click(Sender: TObject);
var
  Data: TData;
begin
  if ListBox1.ItemIndex < 0 then Exit;

  Data := TData(ListBox1.Items.Objects[ListBox1.ItemIndex]);

  Memo1.Lines.Text := Data.Zusatztext;
end;
Zuerst wird eine einfache Klasse mit einem String erstellt. Eigentlich ist es ein Record, aber wir brauchen ein Object.

In der Unterprozedur Hinzu wird das Objekt erstellt, der Zusatztext zugewiesen, und zuletzt der ListBox Text mit dem Objekt der ListBox hinzugefügt.

In der Hauptprozedur werden alle Werte hinzugefügt.

Zuletzt wird bei ListBox1Click der Zusatztext aus dem Objekt ermittelt und in Memo geschrieben.

//EDIT:

Da du an einer anderen Stelle mit Adressen und Postleitzahlen hantierst, gehe ich davon aus, daß es dir hier nicht um Blumen und Erde geht, sondern du eine Art Adressbuch schrieben willst. Es wäre also viel einfacher wenn du direkt sagen würdest was du willst, dann könnte man dir besser helfen. Das mit Blumen und dem Text über Blumen verwirt doch nur.

Edit2:
Tippfehler korrigiert.

Popov 30. Jun 2009 00:08

Re: CheckListBox und Memo verwenden
 
Übriges, vielleicht wäre ListView eher was für dein Problem.

Für das Beispiel brauchst du ein ListView auf dem Formular:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);

  procedure Hinzu(Text, Zusatztext: String);
  var
    ListItem: TListItem;
  begin
    with ListView1 do
    begin
      ListItem := Items.Add;
      ListItem.Caption := Text;
      ListItem.SubItems.Add(Zusatztext);
    end;
  end;

var
  NewCol: TListColumn;
begin
  with ListView1 do //das kann auch manuell im Objektinspektor erstellt werden
  begin
    ViewStyle := vsReport;

    NewCol := Columns.Add;
    NewCol.Caption := 'Text';
    NewCol.Width := 150;
    NewCol := Columns.Add;
    NewCol.Caption := 'Zusatztext';
    NewCol.Width := 400;
  end;

  Hinzu('Blume', 'Blumen blühen');
  Hinzu('Wasser', 'Wasser ist feucht');
  Hinzu('Erde', 'In der Erde wachsen Erdäpfel');
  Hinzu('Sand', 'Sand ist voller Sand');
  Hinzu('Dünger', 'Dünger düngt die Erde');
  Hinzu('Licht', 'Licht spendet Wärme');
  Hinzu('Schatten', 'Im Schatten ist es kühler');
end;
Edit:
Tippfehler korrigiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:27 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-2025 by Thomas Breitkreuz