Конференция "KOL" » Cоздание списка файлов [Delphi, Windows]
 
  • RusSun © (08.05.10 21:34) [0]
    Доброе время суток!
    У меня небольшой вопрос.
    По http://kolnmck.kolmck.net/lessons/lessons12.shtml
    делал не большой пример чуть по шире.
    Спотыкаюсь в сохранении почему-то
    первую строку сохраняет так
    ****************************
    C:\Documents and SettingsAll Users
    All Users.WINDOWS.0
    Default
    ...
    ****************************
    то бишь ещё и почему-то примешивает  начало директории
    к первой строке. А дальше нормально.
    Вот код

    program Project1;
    uses
    windows,
    messages,
    kol;
    type  TOnEvent = procedure( Sender: PObj )of object;
    {$R *.res}
    var
    form:Pcontrol;
    // ----- элементы интерфейса -----
    ListFile,
    ListDrv,Button1,Button2 :PControl;
    // ------------------------------
    FileL:pDirList; f:textfile;
    s:string; bo:boolean;Dialog:pOpenSaveDialog;

    i,j:integer;

    DriveBits: set of 0..25;
    DriveNum:integer;
    DriveChar:char;
    //область для процедур
    ///////////////////////////////////////////////////////////////////////////
    Procedure SelDrv ( Dummy : Pointer; Sender : PControl );
    begin
    s:= ListDrv.Text ;
    if FileL=nil then
    FileL := NewDirList(s,'*.*',FILE_ATTRIBUTE_NORMAL)
    else
    begin
     FileL.Clear ;
     FileL.ScanDirectory(s,'*.*',FILE_ATTRIBUTE_NORMAL);
    end;
    FileL.Sort([sdrByName]);

    ListFile.Clear;
    if FileL.Count > 0 then
     for i:=0 to FileL.Count-1 do
      ListFile.add(FileL.Names[i]);
    end;

    procedure clickbutton1(dummy:pointer;Sender:PControl; var mouse:TMouseEventData);
    begin//Сохранeние
    assign(f,GetWorkDir+'Puth.txt');
    rewrite(f);
    for i:=0 to ListFile.Count-1 do s:=s+ListFile.Items[i]+#13#10;
    write(f,s);
    closefile(f);
    form.StatusText[0]:=PChar(GetWorkDir+'Puth.txt');
    end;

    procedure clickbutton2(dummy:pointer;Sender:PControl; var mouse:TMouseEventData);
    begin//Сохранeние как
    Dialog:=NewOpenSaveDialog('',FileFullPath('Project1.exe'),[]) ;
        Dialog.title := 'Сохранить как...';
        dialog.Filter := '*.txt|*.txt|все|*.*';
        Dialog.OpenDialog := false;
        if Dialog.Execute then    //AssignFile(f,SaveDialog1.FileName+'.txt');
        assign(f,Dialog.Filename)else exit;
        rewrite(f);
        for i:=0 to ListFile.Count-1 do s:=s+ListFile.Items[i]+#13#10;
        write(f,s);
        closefile(f);
    form.StatusText[0]:=PChar(Dialog.Filename);
    end;
    procedure ListBox1Click(dimmy:pointer;Sender:PControl);
    begin
    if bo=false then begin
    ListDrv.Text:=ListDrv.Text+ListFile.Items[ListFile.curindex];bo:=true; end else
    ListDrv.Text:=ListDrv.Text+'\'+ListFile.Items[ListFile.curindex];
    SelDrv(nil,nil);
    end;
    procedure formResize(Sender: PObj);
    begin
    ListFile.Width := form.ClientWidth -10;
    ListFile.Height:=form.ClientHeight-60;
    Button1.Top := form.ClientHeight - Button1.Height - 10;
    Button2.Top := form.ClientHeight - Button2.Height - 10;

    end;
    ///////////////////////////////////////////////////////////////////////////
    begin
    Applet:=NewApplet('Список файлов');
    form:=NewForm(Applet,'Список файлов').SetSize(250,300);
    form.Font.FontStyle := [ fsBold ];
    form.Font.FontHeight := 50;
    form.Font.FontName := 'Times New Roman';

    form.CenterOnParent ;
    Form.Font.FontName := 'MS Sans Serif';
    Form.Font.FontHeight := 9;

    //----------- "рисуем" интерфейс -----------------------
    ListDrv := NewComboBox(form,[]).SetAlign(caTop);
    ListFile := NewListbox(form,[]).SetSize(form.Width-10,200).setposition(0,24);
    //lvsDetailNoHeader,[lvoNoScroll,lvoCheckBoxes,lvoEditLabel
    Button1:=NewButton(form,'Сохранить').SetSize(68,25).SetPosition(10,230);
    Button2:=NewButton(form,'Сохранить как').SetSize(95,25).SetPosition(84,230);
    //------------------------------------------------------

    Integer(DriveBits) := GetLogicalDrives; // получаем номера дисков
    i:=0;
    j:=0;

    // узнаем список дисков
    for DriveNum := 0 to 25 do
     if DriveNum in DriveBits then
      begin
        DriveChar := Char(DriveNum + Ord('a'));
        DriveChar := UpCase(DriveChar);
        ListDrv.Add(DriveChar+':\');
        if DriveChar='C' then j:=ListDrv.Count-1; // узнаем каким в очереди идет диск С:\
      end;

    ListDrv.CurIndex := j;
    //область для работы
    ListDrv.OnChange := TOnEvent( MakeMethod( nil, @SelDrv ) );
    ListFile.OnClick:=TonEvent(MakeMethod(nil,@ListBox1Click));
    SelDrv(nil,nil); // показываем файлы на текущем диске
    Button1.OnClick:=TonEvent(MakeMethod(nil,@clickbutton1));
    Button2.OnClick:=TonEvent(MakeMethod(nil,@clickbutton2));
    form.OnResize:=TonEvent(MakeMethod(nil,@formResize));
    bo:=false;
    form.StatusText[0]:='';
    run(Applet);
    end.


    Может конечно вопрос простой.
    Заранее спасибо.
  • Vladimir Kladov © (08.05.10 22:10) [1]
    А что в первой строчке было? У меня получилось Windows, и записалось C:\Windows. В остальных строчках C:\ нет в puth.txt.
  • Vladimir Kladov © (08.05.10 22:15) [2]
    А, я понял, что именно это и удивило: примешивает путь к первой директории сам listbox, так он устроен. А зачем через листбокс делать? Он же еще и с короткими именами работает, да и светить его на форме надо. Не проще ли через способ №3 по тому же уроку, через DirList.
  • RusSun © (08.05.10 22:18) [3]
    Спасибо. вопрос снят:)
 
Конференция "KOL" » Cоздание списка файлов [Delphi, Windows]
Есть новые Нет новых   [134430   +4][b:0][p:0.003]