Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi [FTP]Ordner wechsel durch doppel klick auf Eintrag in der LB (https://www.delphipraxis.net/101609-%5Bftp%5Dordner-wechsel-durch-doppel-klick-auf-eintrag-der-lb.html)

learner90 16. Okt 2007 10:35


[FTP]Ordner wechsel durch doppel klick auf Eintrag in der LB
 
Guten Tag liebe Delphi-Praxis User,

erstmal bin ich jetzt schon sehr positiv über dieses Board überrascht, da ich schon ohne die Frage zu stellen antworten gefunden habe. :dp:
Nur leider zu meinem jetzigen Problem finde ich nichts :-(

Es geht sich um folgendes:

Ich will das wenn man einen Doppel Klick auf einen Ordner welcher in der ListBox aufgelistet ist, direkt in diesen wechselt.
Des weiteren sollen oben in der Listbox zwei Punkte sein so ungefair: <..> und wenn man dann da drauf klickt, wechselt er im übergeordneten Ordner.

Hier mein bisheriger Code:

Delphi-Quellcode:
unit Remote;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdExplicitTLSClientServerBase, IdFTP;

type
  TRemoteUploadTool = class(TForm)
    Serverdaten: TGroupBox;
    BtFtpVerbinden: TButton;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    BtAuswaehlen: TButton;
    GroupBox3: TGroupBox;
    GroupBox4: TGroupBox;
    BtUploadAbbrechen: TButton;
    BtUploadStarten: TButton;
    GroupBox5: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    LboxVerzeichniss: TListBox;
    LboxAuswahl: TListBox;
    PbarAktuelleDatei: TProgressBar;
    ProgressBar2: TProgressBar;
    StaticText2: TStaticText;
    Label3: TLabel;
    IdFTP1: TIdFTP;
    StaticText1: TStaticText;
    StaticText3: TStaticText;
    StaticText4: TStaticText;
    StaticText5: TStaticText;
    EdUser: TEdit;
    EdPasswort: TEdit;
    EdIp: TEdit;
    EdPort: TEdit;
    BtTrennen: TButton;
    StaticText6: TStaticText;
    EdPfad: TEdit;
    procedure BtFtpVerbindenClick(Sender: TObject);
    procedure BtTrennenClick(Sender: TObject);
    procedure LboxVerzeichnissDblClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  RemoteUploadTool: TRemoteUploadTool;

implementation

{$R *.dfm}

procedure TRemoteUploadTool.BtFtpVerbindenClick(Sender: TObject);
  var idftp:TIdFtp;
  Name: String;
  i:integer;
 
begin
  BtTrennen.Visible:=True;
  BtFtpVerbinden.Visible:=false;
  idftp:=TIdftp.Create(Self);

// Mit FTP Verbinden
  idftp.Username:= edUser.Text;
  idftp.Password:= EdPasswort.Text;
  idftp.Port:= StrToInt(EdPort.Text);
  idftp.Host:= EdIp.Text;
    try
      idftp.Connect();
      idftp.ChangeDir(EdPfad.Text);
    except
       showmessage('Leider ist ein Fehler beim Verbinden zum FTP aufgetreten!');
    end;
  if not idftp.Connected then begin
    ShowMessage('Es besetht keine Verbindung!');
    exit;
  end;
 
// Ordner und Dateien auflisten
  idftp.List (LboxVerzeichniss.Items);
end;

procedure TRemoteUploadTool.BtTrennenClick(Sender: TObject);
begin
  IdFTP1.Quit;
  LboxVerzeichniss.Clear;
  BtTrennen.Visible:=false;
  BtFtpVerbinden.Visible:=true;
end;

procedure TRemoteUploadTool.LboxVerzeichnissDblClick(Sender: TObject);
var
vdir:string;
begin
//  IdFTP1.ChangeDir();
end;

end.
Vielen Dank im voraus!

Gruß

marabu 17. Okt 2007 15:39

Re: [FTP]Ordner wechsel durch doppel klick auf Eintrag in de
 
Herzlich willkommen in der Delphi-PRAXiS, learner90.

Zum Indy Projekt gibt es ein paar Demos - darunter auch einen FTP-Client. Beim Doppelklick auf einen Directory-Eintrag wird folgende Funktion (INDY9) aufgerufen:

Delphi-Quellcode:
procedure TMainForm.ChageDir(DirName: String);
Var
  LS: TStringList;
begin
  LS := TStringList.Create;
  try
    SetFunctionButtons(false);

//  Hier reagierst du auf '..'
    if DirName = '..'
      then IdFTP1.ChangeDirUp
      else IdFTP1.ChangeDir(DirName);

    IdFTP1.TransferType := ftASCII;

    CurrentDirEdit.Text := IdFTP1.RetrieveCurrentDir;

    DirectoryListBox.Items.Clear;
    IdFTP1.List(LS);
    DirectoryListBox.Items.Assign(LS);

//  Und hier baust du '..' ein:
    if CurrentDirEdit.Text <> '/' then
      DirectoryListBox.Items.Insert(0, '..');

    if DirectoryListBox.Items.Count > 0 then
      if AnsiPos('total', DirectoryListBox.Items[0]) > 0 then DirectoryListBox.Items.Delete(0);
  finally
    SetFunctionButtons(true);
    LS.Free;
  end;
end;
Getippt und nicht getestet.

Freundliche Grüße vom marabu

learner90 17. Okt 2007 16:08

Re: [FTP]Ordner wechsel durch doppel klick auf Eintrag in de
 
Vielen Dank für das herzliche Willkommen!

Und super vielen Dank für den Code =)

Aber da klappt so einiges nicht =(

Also ich hab mal die Namen so genannt es es bei mir passt aber da kommen folgende Fehler:

Zitat:

[DCC Fehler] Remote.pas(98): E1030 Ungültige Compileranweisung: 'LS'
[DCC Fehler] Remote.pas(129): E2029 Deklaration erwartet, aber Dateiende gefunden
[DCC Fehler] FtpRemoteUploadTool.dpr(5): F2063 Verwendete Unit 'versuch2\Remote.pas' kann nicht compiliert werden
Und was machst du mit dieser Anweisung:
Delphi-Quellcode:
SetFunctionButtons(false);
?

marabu 17. Okt 2007 19:31

Re: [FTP]Ordner wechsel durch doppel klick auf Eintrag in de
 
Hi,

der Code stammt aus der Indy9-Demo, nur die zwei kommentierten Stellen habe ich gebaut um dir zu zeigen, wie du den Eintrag für das übergeordnete Verzeichnis einbauen kannst. Du solltest dir vielleicht den ganzen Quelltext anschauen und dann darüber nachdenken, wie du meine Vorgehensweise auf dein Projekt übertragen kannst. Es dürfte ja nicht so schwer sein, da sich verschiedene FTP-Clients doch naturgemäß sehr ähneln. Auf jeden Fall lässt sich Indy9-Code ohne Anpassungen nicht unbedingt mit Indy10 übersetzen.

Auch du wirst eine Prozedur haben, mit der du den Doppelklick auf ein Verzeichnis behandelst - Wechsel des Verzeichnisses und Einlesen aller Einträge. Dort würde ich mit den Änderungen ansetzen.

Freundliche Grüße


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