AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit Listbox Einträgen

Ein Thema von Johnny Bravo · begonnen am 18. Jun 2008 · letzter Beitrag vom 2. Jul 2008
 
Benutzerbild von calculon
calculon

Registriert seit: 16. Sep 2006
256 Beiträge
 
Delphi 7 Personal
 
#11

Re: Probleme mit Listbox Einträgen

  Alt 18. Jun 2008, 23:39
Hallo,

da mich das auch interessiert, hab' ich mal DaddyH's Idee umgesetzt. Nach etwas googeln, kam' ich zu diesem Link und das hab' ich mal auf dein Problem übertragen:

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure ListBox1DblClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type
  TListEntry = record
    FullFilename: string[255]
  end;
  // Pointer to data record
  PListEntry = ^TListEntry;
var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure GetFilesInDirectory(ADirectory: string; AMask: String; AList: TStrings; ARekursiv: Boolean);
var
  Entry: PListEntry;
  SR: TSearchRec;
begin
  if (ADirectory <> '') and (ADirectory[length(ADirectory)] <> '\') then
    ADirectory := ADirectory + '\';

  if (FindFirst(ADirectory + AMask, faAnyFile and not faDirectory, SR) = 0) then begin
    repeat
      if (SR.Attr and faDirectory) = 0 then
        begin
          new(Entry);
          Entry^.FullFilename := ADirectory + SR.Name;
          AList.AddObject(SR.Name, TObject(Entry))
          //AList.Add(ADirectory+SR.Name)
        end;
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;

  if ARekursiv then
    if (FindFirst(ADirectory + '*.*', faDirectory, SR) = 0) then
    begin
      repeat
        if (SR.Name <> '.') and (SR.Name <> '..') then
          GetFilesInDirectory(ADirectory + SR.Name, AMask, AList, True);
      until FindNext(SR) <> 0;
      FindClose(SR);
    end;
end;

procedure ShowFullFilename(const ID: Integer);
var
  Filename: string;
begin
  Filename := PListEntry(Form1.ListBox1.Items.Objects[ID])^.FullFilename;
  ShowMessage(Filename);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox1.Items.BeginUpdate;
  GetFilesInDirectory('C:\...\Eigene Dateien', '*.*', ListBox1.Items, True);
  ListBox1.Items.EndUpdate;
end;

procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
  if ListBox1.ItemIndex <> -1 then
    ShowFullFilename(ListBox1.ItemIndex);
end;

end.
Hierbei wird ein Verzeichnis gescanned und die Dateinamen ohne den Pfad in die Listbox geschrieben, der volle Dateiname wird ebenfalls hinterlegt (AList.AddObject(SR.Name, TObject(Entry))). So wie ich das unter dem Link verstanden habe ist TObject nur der Zeiger auf den String, den wir anlegen und kann somit referenziert werden. Was mich noch interessieren würde, wäre wie ich einen string > 255 Zeichen hinbekomme. Wenn ich das im Record erhöhe bekomme ich folgende Fehlermeldung: "String-Literale können maximal 255 Elemente besitzen".

Gruß
--

€: Christian Seehase's Hinweise übernommen...
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 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