Delphi-PRAXiS
Seite 1 von 2  1 2      

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 zusatzinformationen in tlistbox (https://www.delphipraxis.net/133143-zusatzinformationen-tlistbox.html)

eric - the master 26. Apr 2009 19:47


zusatzinformationen in tlistbox
 
Hallo,
ich möchte gerne einen array
Delphi-Quellcode:
type ttest = record   //verbund
        wert1: string[50];
        wert2: string[50];
        wert3: string[60];
   
end;      
 tttest = array[1..800] of ttest;


public
    myarray : tttest;
in einer listbox ausgeben. Die Werte sollen dann mit einem Klick auf die entsprechende zeile bearbeitet werden können.

Delphi-Quellcode:
Form1.Ausgabe.items.add ( myarray[1].wert1) ; //in listbox eintragen
Form1.Ausgabe.items.add ( myarray[1].wert2) ;
Form1.Ausgabe.items.add ( myarray[1].wert3) ;
Form1.Ausgabe.items.add ( myarray[2].wert1) ;
...
dazu muss ich an die einzelnen items zusätzliche (für den Nutzer unsichtbare)Informationen anhängen z.B. den index des arrays und wieder auslesen können. Ich hab schon viel im Internet rumgesucht und ich hab auch schon die Suchfunktion benutzt aber keine hilfreichen Infos gefunden. Da schreibt man das es mit addobject irgentwie geht aber ich komme damit nicht so richtig klar. :-( Ich bin noch Änfänger also bitte nicht ganz so chinesisch^^. Thx

Luckie 26. Apr 2009 19:54

Re: zusatzinformationen in tlistbox
 
Häng die Informationen als Objekt an die Listboxeintäge an mit der Methode AddObject. Zum Beispiel so: http://www.michael-puff.de/Developer...ddObject.shtml

eric - the master 26. Apr 2009 20:04

Re: zusatzinformationen in tlistbox
 
ja aber ich sehe da nicht so ganz durch

kann mir einer das in einer verständlichen Sprache erklären wie man einen unsichtbaren string an ein item hängt??? Und dann auch wieder liest??
Bitte :(

Da ich es schon wieder sehe was bedeutet dieses zeichen ^ in delphi??

MFG eric

Hansa 26. Apr 2009 20:38

Re: zusatzinformationen in tlistbox
 
Das was Luckie da mit den ^ fabriziert hat, das ist IMHO zuviel des guten. ^^ :mrgreen: Rest steht in der Hilfe :

Zitat:

Für dieses Beispiel werden eine TListView-, eine TImageList- und eine TComboBox-Komponente benötigt. Sie müssen vor dem Start des Projekts auf die Bilderliste doppelklicken und mehrere Bilder einfügen. Sie können dazu die Grafikdateien (*.BMP oder *.ICO) im Verzeichnis \IMAGES\ICONS verwenden.
In der Behandlungsroutine für das Ereignis OnCreate des Formulars wird für jedes Element in der Bilderliste ein Eintrag in die Listenansicht eingefügt. Es werden zwei Spalten erstellt, so dass eine Spaltenansicht verfügbar ist, wenn ViewStyle auf vsReport gesetzt wird.

In der Ereignisbehandlungsroutine werden dem Kombinationsfeld auch die vier möglichen TViewStyle-Konstanten zugewiesen. Dies könnte auch einfach in einer Folge von Ereignisbehandlungsroutinen für OnClick durchgeführt werden, etwa in der Form ListView1.ViewStyle := vsIcon.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  I: Integer;
  ListItem: TListItem;
  NewColumn: TListColumn;
begin
  // ListView-Eintrag für jede Grafik in Bilderliste erstellen
  with ListView1 do
  begin
    SmallImages := ImageList1;
    LargeImages := ImageList1;
    for I := 0 to ImageList1.Count - 1 do
    begin
      ListItem := Items.Add;
      Listitem.Caption := 'Image' + IntToStr(I);

      ListItem.ImageIndex := I;
    end;
    // Zwei Spalten für Anzeigemodus vsReport erstellen
    NewColumn := Columns.Add;
    NewColumn.Caption := 'Column 1';
    NewColumn := Columns.Add;
    NewColumn.Caption := 'Column 2';
    // Ansichtsstile und Konstanten zu Kombinationsfeld hinzufügen
    ComboBox1.Items.AddObject('vsIcon', TObject(vsIcon));
    ComboBox1.Items.AddObject('vsList', TObject(vsList));
    ComboBox1.Items.AddObject('vsReport', TObject(vsReport));

    ComboBox1.Items.AddObject('vsSmallIcon', TObject(vsSmallIcon));
    // Erstes Element in Kombinationsfeld anzeigen
    ComboBox1.ItemIndex := 0;
  end;
end;

procedure TForm1.ComboBox1Click(Sender: TObject);
begin
  with ComboBox1 do
    ListView1.ViewStyle := TViewStyle(Items.Objects[ItemIndex]);
end;


eric - the master 27. Apr 2009 21:03

Re: zusatzinformationen in tlistbox
 
Ich möchte ja eigentlich keine Bilder einfügen sondern nur einen kurzen String, ich kann mir nicht vorstellen das das so komplexx ist.


Erstmal danke für eure Antworten :thumb: :-D

taaktaak 27. Apr 2009 21:31

Re: zusatzinformationen in tlistbox
 
das ist es auch nicht ...

Delphi-Quellcode:
procedure TfoTest11.FormShow(Sender:TObject);
var i  : Integer;
    Str : String;
begin
  for i:=0 to 9 do begin
   Str:='hihihihi';
   Listbox1.Items.AddObject('Hallo'+IntToStr(i),Pointer(Str))
   end;

end;

procedure TfoTest11.ListBox1DblClick(Sender:TObject);
begin
  ShowMessage(String(Listbox1.Items.Objects[Listbox1.ItemIndex]))
end;

eric - the master 27. Apr 2009 22:04

Re: zusatzinformationen in tlistbox
 
okay danke leute für eure bemühungen!!!!
taaktaak ich werd das morgen gleich mal ausprobieren! Ich sag euch dann bescheid. Heute ist zu spät.


thx

hauta wa

Hansa 27. Apr 2009 22:08

Re: zusatzinformationen in tlistbox
 
Taaktaak: Was geht denn wie nicht ?

Chemiker 28. Apr 2009 01:04

Re: zusatzinformationen in tlistbox
 
Hallo eric – the master,

man kann das auch mit einem Object lösen.

Zuerst das Object:

Delphi-Quellcode:
unit uListBoxObjectClass;

interface

uses
  Classes;

type
  Ttest= Class(TObject)
  private
    FWert1: String;
    FWert2: String;
    FWert3: String;
    procedure GetFWerte1(const Value: String);
    procedure GetFWerte2(const Value: String);
    procedure GetFWerte3(const Value: String);
    function SetFWert1: String;
    function SetFWert2: String;
    function SetFWert3: String;
  public
    constructor Create();
    destructor Destroy; override;  
    property Wert1: String Read SetFWert1 write GetFWerte1;
    property Wert2: String Read SetFWert2 write GetFWerte2;
    property Wert3: String Read SetFWert3 write GetFWerte3;
  End;

implementation

{ Ttest }

constructor Ttest.Create;
begin
  inherited Create;
end;

destructor Ttest.Destroy;
begin            
  inherited;
end;

procedure Ttest.GetFWerte1(const Value: String);
begin
  if Value<>FWert1 then
  begin
    FWert1:= Value;
  end;
end;

procedure Ttest.GetFWerte2(const Value: String);
begin
  if Value<>FWert2 then
  begin
    FWert2:= Value;
  end;
end;

procedure Ttest.GetFWerte3(const Value: String);
begin
  if Value<>FWert3 then
  begin
    FWert3:= Value;
  end;
end;

function Ttest.SetFWert1: String;
begin
  Result:= FWert1;
end;

function Ttest.SetFWert2: String;
begin
  Result:= FWert2;
end;

function Ttest.SetFWert3: String;
begin
  Result:= FWert3;
end;

end.
Und jetzt das Hauptprogramm:

Delphi-Quellcode:
unit frmListBox;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, uListBoxObjectClass;

type
  TForm3 = class(TForm)
    ListBox1: TListBox;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button1: TButton;
    Edit4: TEdit;
    procedure ListBox1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    Test: TTest;  
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
var
  strText: String;
begin
  Test:= TTest.Create;      // Object erstellen
  Test.Wert1:= Edit1.Text;  // Text im Object ablegen
  Test.Wert2:= Edit2.Text;
  Test.Wert3:= Edit3.Text;
  strText:= Edit4.Text;
  ListBox1.AddItem(strText, Test); // In die Listbox
end;

procedure TForm3.FormDestroy(Sender: TObject);
var
  I: Integer;
begin
   for i:= ListBox1.Count - 1 downto 0 do
   begin  
     Test:= TTest(ListBox1.Items.Objects[i]);
     if Test<>NIL then
     begin
       freeAndNil(Test);      
     end;
   end
end;

procedure TForm3.ListBox1Click(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to ListBox1.Count - 1 do
  begin
    if ListBox1.Selected[i] then
    begin
      Edit1.Clear;
      Edit2.Clear;
      Edit3.Clear;
      Edit1.Text:= TTest(ListBox1.Items.Objects[i]).Wert1;
      Edit2.Text:= TTest(ListBox1.Items.Objects[i]).Wert2;
      Edit3.Text:= TTest(ListBox1.Items.Objects[i]).Wert3;        
    end;
  end;
end;

end.
Bis bald Chemiker

taaktaak 28. Apr 2009 06:45

Re: zusatzinformationen in tlistbox
 
Moin, Moin.
@Hansa: War wohl irreführend :-D

Eric schrieb:
Zitat:

ich kann mir nicht vorstellen das das so komplexx ist
meine Antort war:
Zitat:

das ist es auch nicht ...
PS: Den String 10x in der Schleife zu belegen ist natürlich ziemlich dämlich. Aber die grundsätzliche Vorgehensweise sollte trotzdem deutlich werden. Alle anderen Lösungen sind ja recht umfangreich und scheinen eher zu verwirren. Aufgabe ist doch lediglich einen String "unsichtbar" mit einem Listboxeintrag zu verknüpfen?!


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:40 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