Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit listbox (verstehe die warnung nicht) (https://www.delphipraxis.net/25232-problem-mit-listbox-verstehe-die-warnung-nicht.html)

G G 3. Jul 2004 09:08


Problem mit listbox (verstehe die warnung nicht)
 
hi also ich hab folgenden code, aber da kommt zb da wo ich die proz aufrufe ein fehler,usw?
wie macht man das den richtig, muss ich bei uses noch was hinzufügen etc...
der fehler lautet :
[Fehler] Unit1.pas(30): Inkompatible Typen: 'TStringList' und 'Class reference'
vielen dank
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    List: TListBox;
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    procedure FindAll(Path: String; List: TStringList);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
FindAll('c:/', TStringList);
end;



procedure FindAll(Path: String; List: TStringList);
var
  SearchRec: TSearchRec;
begin
  List.Clear;
  if FindFirst(Path + '*.*', faAnyFile, SearchRec) = 0 then
    repeat
      List.Add(SearchRec.Name);
    until FindNext(SearchRec) <> 0;
  FindClose(SearchRec);
end;
end.

phlux 3. Jul 2004 09:13

Re: Problem mit listbox (verstehe die warnung nicht)
 
Weil du deiner Procedure einen Klassennamen TStringList übergibst...

Edit: Da muss ein Object vom Typ TStringList rein, aber nicht der Klassenname ;)

Nicodius 3. Jul 2004 09:14

Re: Problem mit listbox (verstehe die warnung nicht)
 
statt
Delphi-Quellcode:
FindAll('c:/', TStringList);
musst du

Delphi-Quellcode:
FindAll('c:/', Den_namen_einer_TStringlist_komponente);

G G 3. Jul 2004 09:20

Re: Problem mit listbox (verstehe die warnung nicht)
 
hm danke, aber irgendwie weiß ich nicht so recht was der name meiner "Den_namen_einer_TStringlist_komponente" was ist das, weil "list" als nahme meiner listbox kann ich nicht verwenden.
sorry das ich so dumm frag hab erst knapp über 2 wochen delphi :roll:

Chewie 3. Jul 2004 09:22

Re: Problem mit listbox (verstehe die warnung nicht)
 
List.Items ist vom Typ TStringList.

G G 3. Jul 2004 09:25

Re: Problem mit listbox (verstehe die warnung nicht)
 
hm da kommt jetzt der fehler
[Fehler] Unit1.pas(30): Inkompatible Typen: 'TStringList' und 'TStrings'

Alexander 3. Jul 2004 09:31

Re: Problem mit listbox (verstehe die warnung nicht)
 
Dann ändere einfach den Typ in der Finall-Procedure in TStrings um (statt TStringlist).
Delphi-Quellcode:
procedure FindAll(Path: String; List: TStrings);
begin
...
end;

Nicodius 3. Jul 2004 09:35

Re: Problem mit listbox (verstehe die warnung nicht)
 
mit dem "Den_namen_einer_TStringlist_komponente" meinte ich zumbeispiel Stringlist1(oben vereinbart var Stringlist1 : TStringlist)

.. ;)


aber list geht nicht weil es ein reserviertes Wort ist! also ... anderer Name ;)

G G 3. Jul 2004 09:51

Re: Problem mit listbox (verstehe die warnung nicht)
 
boa ich blicks grad garnicht :lol: is einer vielleicht so nett und schreibt mir einfach mal meinen geposteten code, in richtiger form hin. wär echt super... vielen vielen dank :P

Dani 3. Jul 2004 10:03

Re: Problem mit listbox (verstehe die warnung nicht)
 
Tach! :)
Vorher die Komponente auf deinem Formular mit dem Designer in "Listbox1" umbenennen...

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Listbox1: TListBox;
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
   
  private
    { Private-Deklarationen } 
  public
    procedure FindAll(Path: String; Items: TStrings);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm} 

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 Listbox1.Clear;
 FindAll('c:/', Listbox1.items);
end;



procedure TForm1.FindAll(Path: String; Items: TStrings);
var
  SearchRec: TSearchRec;
begin
 If not Assigned(Items) then exit;
  if FindFirst(Path + '*.*', faAnyFile, SearchRec) = 0 then
    repeat
      Items.Add(SearchRec.Name);
    until FindNext(SearchRec) <> 0;
  SysUtils.FindClose(SearchRec);
end;
end.
Edit: Ups...hab was übersehen
Edit Nr5: Okay TListbox.items ist vom Typ TStrings und nicht TStringlist

G G 3. Jul 2004 10:13

Re: Problem mit listbox (verstehe die warnung nicht)
 
hm kommisch tauchen immernoch die 2 fehler auf
[Fehler] Unit1.pas(31): Inkompatible Typen: 'TStringList' und 'TStrings'
[Fehler] Unit1.pas(14): Ungenügende Forward- oder External-Deklaration: 'TForm1.FindAll'
:gruebel:

Nicodius 3. Jul 2004 10:20

Re: Problem mit listbox (verstehe die warnung nicht)
 
DAS KANN SO JA NICHT GEHEN! :roll:

Delphi-Quellcode:
procedure FindAll(Path: String; List: TStringList);

procedure FindAll(Path: String; Items: TStrings);

du mustt bei der unteren
Delphi-Quellcode:
procedure FindAll(Path: String; List: TStringList);


;)

oben Findall(FindAll('c:/', Listbox1);

Dani 3. Jul 2004 10:31

Re: Problem mit listbox (verstehe die warnung nicht)
 
Hab's korrigiert ;)

G G 3. Jul 2004 11:12

Re: Problem mit listbox (verstehe die warnung nicht)
 
hm sorry das cih euch immernoch nerv, aber irgendwie will das einfach nicht funtkionieren. Ich hab jetzt grad eben das von dani versucht kommt aber dann der fehler:
[Fehler] Unit1.pas(31): Inkompatible Typen: 'TStringList' und 'TStrings'
wenn ich das von Nicodius verusche
Zitat:

oben Findall(FindAll('c:/', Listbox1);
dann kommt der fehler:
[Fehler] Unit1.pas(31): Inkompatible Typen: 'TStringList' und 'TListBox'

habs ihr noch ne idea :pale:

Dani 3. Jul 2004 11:25

Re: Problem mit listbox (verstehe die warnung nicht)
 
Ersetze alle TStringlists durch TStrings und es sollte gehen
-habs im Code geändert
Die Inkompatibilität von TStrings und TStringlist kann schon nerven :-/

G G 3. Jul 2004 11:49

Re: Problem mit listbox (verstehe die warnung nicht)
 
sehr schön danke, jetzt hauts perfekt hin.
bin euch was schuldig :cheers:
:dancer: :dancer2: :hello: :dancer: :dancer2:

Christian Seehase 3. Jul 2004 14:15

Re: Problem mit listbox (verstehe die warnung nicht)
 
Moin Zusammen,

@Nicodius:
Wenn ein Parameter als TStringList deklariert wird, so kann man alles übergeben, was vom Typ TStringList ist, oder davon abgeleitet. Analog gilt: Ist der Parametertyp TStrings, kann alles übergeben werden, was von TStrings abgeleitet wurde, also auch ListBox.Items und Stringlisten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:34 Uhr.

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