Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   FileListBox (https://www.delphipraxis.net/85986-filelistbox.html)

SaFu 7. Feb 2007 14:43


FileListBox
 
Wie kann man in einer FileListBox die Einträge z.B. jpg zeitlich durchlaufen lassen und in einem Image anzeigen lassen

habe es so aber bekomme Fehler wenn ich das gleich auf einem anderen FormBlatt mache:
Delphi-Quellcode:
procedure TForm5.Button1Click(Sender: TObject);
begin
Timer1.Enabled:= True;
end;

procedure TForm5.Timer1Timer(Sender: TObject);
var a,dokus,test :string;
begin
   if FileListBox2.Items.Count > 0 then
    begin
      if FileListBox2.ItemIndex+1 <> FileListBox2.Items.Count then
       begin
        a:= FileListBox2.Items[FileListBox2.ItemIndex+1]; // hochzählen der datein
        FileListBox2.Filename:= a;
        dokus:= Lowercase(ExtractFileExt(FileListBox2.Filename));

     if (dokus = '.rtf') then
          begin
            Richedit1.PlainText:= False;
            Richedit1.Lines.LoadFromFile(FileListBox2.Filename);
            test:= Richedit1.Text
          end;
         end
     else
      begin
         a:= FileListBox2.Items[0];
         FileListBox2.Filename:= a;
      end;
    end;
end;

procedure TForm5.FileListBox2Change(Sender: TObject);
var dokus :string;
begin
  dokus:= LowerCase(ExtractFileExt(FileListBox2.Filename));
    if (dokus = '.rtf') then
      begin
        RichEdit1.PlainText := False;
        RichEdit1.Lines.LoadFromFile(FileListBox2.FileName);
      end;

    if (dokus = '.rtf') then
      begin
       Form9.RichEdit1.PlainText := False;
       Form9.Richedit1.Lines.LoadFromFile(FileListBox2.FileName);
      end;
end;

procedure TForm5.Button3Click(Sender: TObject);
begin
 Timer1.Enabled:= False;
end;
würde eure Hilfe sehr schätzen find dieses problem einfach nicht

Klaus01 7. Feb 2007 14:54

Re: FileListBox
 
Sollte es nicht ähnlich gehen, wie bei den RichEdits die Du lädst?

Nur dann so:

Delphi-Quellcode:
Form9.Image1.Picture.LoadFromFile(FileName);
Wenn Du jpg laden willst, mußt Du die Unit jpeg in die uses einbinden.

Grüße
Klaus

SaFu 7. Feb 2007 14:55

Re: FileListBox
 
Habe ich schon getan steht in den Uses drin

SaFu 7. Feb 2007 15:07

Re: FileListBox
 
Ja habe ich gemacht läuft auch solange nicht alle beide Anzeigen laufen

hier nochmal alle beide Formblätter.

Bilder Durchlauf und anzeige
Delphi-Quellcode:

unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Menus, JPEG,ShellAPI, GifImage, FileCtrl, ExtDlgs;

type
  TForm4 = class(TForm)
    Panel1: TPanel;
    Button4: TButton;
    FileListBox1: TFileListBox;
    Timer1: TTimer;
    GroupBox1: TGroupBox;
    Button2: TButton;
    Button3: TButton;
    Button5: TButton;
    GroupBox2: TGroupBox;
    Button6: TButton;
    Button1: TButton;
    Button7: TButton;
    OpenDialog1: TOpenDialog;
    Button10: TButton;
    Button9: TButton;
    Label1: TLabel;
    Image1: TImage;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    CheckBox1: TCheckBox;
    Label5: TLabel;
    Panel3: TPanel;
    Panel4: TPanel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FileListBox1Change(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);

  private
  n :integer; { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form4: TForm4;


implementation

uses Unit2, Unit8, Unit3, Unit9;

{$R *.dfm}
{Schließen}
procedure TForm4.Button4Click(Sender: TObject);
begin
  Form4.Close;
  Form2.Visible:= True;
end;


procedure TForm4.FormShow(Sender: TObject);
var i :integer;
begin
  n:= 2000; // Strart interval des Timers

  for i:=0 to ComponentCount-1 do    // XP Anzeige
  if Components[i] is TPanel then (Components[i] as TPanel).ParentBackground:= False;

  FileListBox1.Directory:= ExtractFilePath(ParamStr(0))+'\Bilder\';
 
end;


{Ordner Anzeige}
procedure TForm4.FileListBox1Change(Sender: TObject);
var bild : string;
begin
  bild:= LowerCase(ExtractFileExt(FileListBox1.Filename));

  if (bild = '.jpg') then // Laden von JPG
    begin
     Image1.Picture.RegisterFileFormat('jpg', 'Jpeg', TjpegImage);
     Image1.Picture.LoadFromFile(FileListBox1.FileName);
    end;
end;

{Zeit des Durchlaufs}
procedure TForm4.Timer1Timer(Sender: TObject);
var  bild,i : string;
begin
   if FileListBox1.Items.Count > 0 then
    begin
      if FileListBox1.ItemIndex+1 <> FileListBox1.Items.Count then
       begin
         i:= FileListBox1.Items[FileListBox1.Itemindex+1]; // hochzählen der datein
         FileListBox1.Filename:= i;
         bild:= Lowercase(ExtractFileExt(FileListBox1.Filename));

      if (bild = '.jpg') then
          begin
            Image1.Picture.RegisterFileFormat('jpg', 'Jpeg', TjpegImage);
            Image1.Picture.LoadFromFile(FileListBox1.Filename);
          end;

     
       if (bild = '.jpg') then
          begin
            Form3.Image1.Picture.RegisterFileFormat('jpg', 'Jpeg', TjpegImage);
            Form3.Image1.Picture.LoadFromFile(FileListBox1.Filename);
          end;
     
      end
    else
      begin
         i:= FileListBox1.Items[0];
         FileListBox1.Filename:= i;
       end;
    end;
end;

{Durchlaufs anhalten}
procedure TForm4.Button3Click(Sender: TObject);
begin
  Timer1.Enabled:= False;
end;

{Durschlaufstarten}
procedure TForm4.Button2Click(Sender: TObject);
begin
  Timer1.Enabled:= True;
end;

Dokumenten Durchlauf und Anzeige
Delphi-Quellcode:
unit Unit5;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,ShellApi, ExtCtrls, Printers, Menus, FileCtrl, ComCtrls;

type
  TForm5 = class(TForm)
    Panel1: TPanel;
    Button4: TButton;
    FileListBox2: TFileListBox;
    RichEdit1: TRichEdit;
    OpenDialog1: TOpenDialog;
    Timer1: TTimer;
    GroupBox1: TGroupBox;
    Button1: TButton;
    Button3: TButton;
    Button6: TButton;
    GroupBox2: TGroupBox;
    Button7: TButton;
    Button5: TButton;
    Button8: TButton;
    Button2: TButton;
    Label1: TLabel;
    Button9: TButton;
    Button10: TButton;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    CheckBox1: TCheckBox;
    Label5: TLabel;
    Panel3: TPanel;
    Panel2: TPanel;
    procedure Button4Click(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FileListBox2Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
   
  private
  n :integer; { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form5: TForm5;

implementation

uses Unit2, Unit9, Unit3, Unit8;

{$R *.dfm}
{Schließen}
procedure TForm5.Button4Click(Sender: TObject);
begin
  Form5.Close;
  Form2.Visible:= True;
end;

procedure TForm5.FormCreate(Sender: TObject);
var i :integer;
begin
    n:= 2000; // Strart interval des Timers

    for i:=0 to ComponentCount-1 do // XP Anzeige
    if Components[i] is TPanel then (Components[i] as TPanel).ParentBackground:= False;

    FileListBox2.Directory:= ExtractFilePath(ParamStr(0))+'\Dokumente nur RTF\';

    Label5.Caption:= 'LCD Anzeige der Dokumente'+#10+'Ein oder Ausschalten';
end;

procedure TForm5.Timer1Timer(Sender: TObject);
var a,dokus,test :string;
begin
   if FileListBox2.Items.Count > 0 then
    begin
      if FileListBox2.ItemIndex+1 <> FileListBox2.Items.Count then
       begin
        a:= FileListBox2.Items[FileListBox2.ItemIndex+1]; // hochzählen der datein
        FileListBox2.Filename:= a;
        dokus:= ExtractFileExt(FileListBox2.Filename);

     if (dokus = '.rtf') then
          begin
            Richedit1.PlainText:= False;
            Richedit1.Lines.LoadFromFile(FileListBox2.Filename);
            test:= Richedit1.Text
          end;
         end
     else
      begin
         a:= FileListBox2.Items[0];
         FileListBox2.Filename:= a;
      end;
    end;
end;

procedure TForm5.FileListBox2Change(Sender: TObject);
var dokus :string;
begin
  dokus:= LowerCase(ExtractFileExt(FileListBox2.Filename));
    if (dokus = '.rtf') then
      begin
        RichEdit1.PlainText := False;
        RichEdit1.Lines.LoadFromFile(FileListBox2.FileName);
      end;

    if (dokus = '.rtf') then
      begin
       Form9.RichEdit1.PlainText := False;
       Form9.Richedit1.Lines.LoadFromFile(FileListBox2.FileName);
      end;
end;

procedure TForm5.Button1Click(Sender: TObject);
begin
Timer1.Enabled:= True;
end;

procedure TForm5.Button3Click(Sender: TObject);
begin
 Timer1.Enabled:= False;
end
Gibt es vielleicht eine einfachere lösung mit der ich dieses realiesieren kann??????????

marabu 7. Feb 2007 17:49

Re: FileListBox
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Sascha,

ich bewundere das, wie du ohne sprechende Namen für deine zahlreichen Komponenten den Überblick behältst. Ich muss da immer bereits nach zehn Zeilen kapitulieren. Wo jetzt genau dein Fehler liegt habe ich nicht sehen können - du weißt schon, die zehn Zeilen...

Ein paar Dinge sind mir aber doch aufgefallen:

(1) Du musst das JPEG-Format nur einmal registrieren, nachdem die Image-Komponente erzeugt wurde, also im OnCreate() der Form.
(2) Wenn du eine Zahl i von 0 bis n-1 laufen lassen willst, dann geht das am einfachsten so: i := Succ(i) mod n

Ich hatte übrigens keine Probleme mehrere Forms parallel laufen zu lassen. Mein Testprojekt habe ich angehängt. Vielleicht musst du mal die Fehler genauer beschreiben.

Freundliche Grüße

SaFu 8. Feb 2007 10:31

Re: FileListBox
 
Also wenn ich auf der ersten Form die FileListBox durschlaufen lasse, läuft sie ohne Probleme durch und die Bilder werden nacheinander in das Image geladen.

Wenn ich jetzt auf die andere Form wechsel auf der die ander FilelistBox ist bekomme ich einen Fehler und zwar

Delphi-Quellcode:
Klasse EInOutError 'datei nicht gefunden'
und das an dieser stelle im Programm

Delphi-Quellcode:
Form4.FileListBox1.Filename:= i;// hier
         bild:= ExtractFileExt(Form4.FileListBox1.Filename);
aber einzeln läuft alles wunderbar??

marabu 8. Feb 2007 10:37

Re: FileListBox
 
Hallo Sascha,

du solltest dein Programm mal an der Fehlerstelle anhalten (Haltepunkt mit F5) und dir den Inhalt von i (schöner Variablen-Name für einen Dateinamen) anschauen. Vielleicht hat das Programm ja recht und die Datei existiert wirklich nicht?

Freundliche Grüße

Klaus01 8. Feb 2007 10:44

Re: FileListBox
 
Zitat:

Zitat von fuknersascha
Also wenn ich auf der ersten Form die FileListBox durschlaufen lasse, läuft sie ohne Probleme durch und die Bilder werden nacheinander in das Image geladen.

Wenn ich jetzt auf die andere Form wechsel auf der die ander FilelistBox ist bekomme ich einen Fehler und zwar

Delphi-Quellcode:
Klasse EInOutError 'datei nicht gefunden'

Hallo Sascha,

vielleicht solltest Du, wenn du die Bilder oder Dokumente lädtst, den Pfad mit einbauen
wo die Bilder und Dokumente liegen.

Delphi-Quellcode:
Image1.Picture.LoadFromFile(FileListBox1.FileName);
Wenn Du die Dokumente startest wird das current working directory auf das gelegt wo die Dokumente liegen.
Startest Du nun die Anzeige der Bilder, werden die Bilder bei den Dokumenten gesucht.

Delphi-Quellcode:
Image1.Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'Bilderverzeichnis\'+FileListBox1.FileName);
und ähnlich auch bei den RTF dokumenten.

Und wenn Du die Bilder nicht zweimal laden willst, sollte auch das gehen:

Delphi-Quellcode:
if (bild = '.jpg') then
  begin
    Image1.Picture.RegisterFileFormat('jpg', 'Jpeg', TjpegImage);
    Image1.Picture.LoadFromFile(FileListBox1.Filename);
    Form3.Image1.Picture.Assign(Image1.Picture)
  end;
Grüße
Klaus

SaFu 8. Feb 2007 13:10

Re: FileListBox
 
Habe denn Code soweit angepasst bekomme aber Trotzdem noch Fehler

Delphi-Quellcode:
procedure TForm5.FormCreate(Sender: TObject);
var i :integer;
begin
    n:= 2000; // Strart interval des Timers

    for i:=0 to ComponentCount-1 do // XP Anzeige
    if Components[i] is TPanel then (Components[i] as TPanel).ParentBackground:= False;

    FileListBox2.Directory:= ExtractFilePath(ParamStr(0))+'\Dokumente nur RTF\';

    Label5.Caption:= 'LCD Anzeige der Dokumente'+#10+'Ein oder Ausschalten';
end;


{Drucker auswählen}

procedure TForm5.Timer1Timer(Sender: TObject);
var a,dokus :string;
begin
     if FileListBox2.ItemIndex+1 <> FileListBox2.Items.Count then
       begin
        a:= FileListBox2.Items[FileListBox2.ItemIndex+1]; // hochzählen der datein
        FileListBox2.Filename:= a;

     if (dokus = '.rtf') then
          begin
            Richedit1.PlainText:= False;
            Richedit1.Lines.LoadFromFile(ExtractFilePath(ParamStr(0))+'Dokumente nur RTF\'+FileListBox2.FileName);
           end;
         end
     else
     begin
         a:= FileListBox2.Items[0];
         FileListBox2.Filename:= a;
      end;
end;

procedure TForm5.FileListBox2Change(Sender: TObject);
var dokus :string;
begin
  dokus:= LowerCase(ExtractFileExt(FileListBox2.Filename));
    if (dokus = '.rtf') then
      begin
        RichEdit1.PlainText := False;
        RichEdit1.Lines.LoadFromFile(FileListBox2.FileName);
      end;

    if (dokus = '.rtf') then
      begin
       Form9.RichEdit1.PlainText := False;
       Form9.Richedit1.Lines.LoadFromFile(FileListBox2.FileName);
      end;
end;

procedure TForm5.Button1Click(Sender: TObject);
begin
Timer1.Enabled:= True;
end;

procedure TForm5.Button3Click(Sender: TObject);
begin
 Timer1.Enabled:= False;
end;

Delphi-Quellcode:

procedure TForm4.FormShow(Sender: TObject);
var i :integer;
begin
  n:= 2000; // Strart interval des Timers

  for i:=0 to ComponentCount-1 do    // XP Anzeige
  if Components[i] is TPanel then (Components[i] as TPanel).ParentBackground:= False;

  FileListBox1.Directory:= ExtractFilePath(ParamStr(0))+'\Bilder\';

  Label5.Caption:= 'LCD Anzeige der Bilder'+#10+'Ein oder Ausschalten';
  Image1.Picture.RegisterFileFormat('jpg', 'Jpeg', TjpegImage);
end;


{Ordner Anzeige}
procedure TForm4.FileListBox1Change(Sender: TObject);
var bild : string;
begin
  bild:= LowerCase(ExtractFileExt(FileListBox1.Filename));
    if (bild = '.jpg') then // Laden von JPG
       begin
         Image1.Picture.LoadFromFile(FileListBox1.FileName);
         Form3.Image1.Picture.Assign(Image1.Picture);
       end;
end;

{Zeit des Durchlaufs}
procedure TForm4.Timer1Timer(Sender: TObject);
var  bild,i : string;
begin
     if FileListBox1.ItemIndex+1 <> FileListBox1.Items.Count then
       begin
         i:= FileListBox1.Items[FileListBox1.Itemindex+1]; // hochzählen des Index
         FileListBox1.Filename:= i;

          if (bild = '.jpg') then
             begin
              Image1.Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'Bilder\'+FileListBox1.FileName);
              Form3.Image1.Picture.Assign(Image1.Picture);
             end;
         end
      else
        begin
         i:= FileListBox1.Items[0];
         FileListBox1.Filename:= i;
        end;
end;

{Durchlaufs anhalten}
procedure TForm4.Button3Click(Sender: TObject);
begin
  Timer1.Enabled:= False;
end;

{Durschlaufstarten}
procedure TForm4.Button2Click(Sender: TObject);
begin
  Timer1.Enabled:= True;
end;
Es ist eigenlich immer noch der gleiche Fehler binn am verzweif :pale: eln

Hawkeye219 8. Feb 2007 13:29

Re: FileListBox
 
Zitat:

Zitat von Klaus01
Delphi-Quellcode:
Image1.Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'Bilderverzeichnis\'+FileListBox1.FileName);

Ob dieser Rat so gut ist? Der Wert der Eigenschaft Delphi-Referenz durchsuchenTFileListBox.FileName enthält bereits eine Pfadangabe.

Gruß Hawkeye


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