搜索
bottom↓
回复: 7

delphi SelectDirectory 出错?求助【恢复】

[复制链接]

出0入0汤圆

发表于 2008-9-18 19:50:23 | 显示全部楼层 |阅读模式
procedure TForm1.Button1Click(Sender: TObject);



var

  Dir: string;

begin

  if SelectDirectory(TForm1.Handle,'请选择要保存接收数据的目录',' ',Dir) then

   edit1.Text := Dir;

end;









Function SelectDirectory(const Caption: string; const Root: String;

        out Directory: String): Boolean;  这个函数怎么写呢





编译出错  SelectDirectory没控件的吧?        哪位大哥做过 给个例子参考下 谢谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2008-9-18 22:14:00 | 显示全部楼层
从MEMO 或 txt 读回数据   怎么放到一维数组里呢 BYTE  A[0] , A[1], A[2], A[3]...



能给个源码吗  谢谢

出0入0汤圆

 楼主| 发表于 2008-9-18 21:08:12 | 显示全部楼层
多谢!  顺便贴下刚搜到的  可以用





我用Delphi7試過用SelectDirectory,在Delphi7中的SelectDirectory是可以有預設的,所以我將Delphi7的SelectDirectory的原代碼改在Delphi5內測試,改了函數的名稱叫SelectFolder,經過我改動後,新的SelectFolder函數是可以做到我預期的效果了,以下是我的編碼

unit Unit1;



interface



uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    filectrl, StdCtrls;



type

    TForm1 = class(TForm)

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

    end;



var

    Form1: TForm1;



implementation



uses

    ShlObj, ActiveX;



{$R *.DFM}



function SelectDirCB(Wnd: HWND; uMsg: UINT; lParam, lpData: LPARAM): Integer stdcall;

begin

    if (uMsg = BFFM_INITIALIZED) and (lpData <> 0) then

    SendMessage(Wnd, BFFM_SETSELECTION, Integer(True), lpdata);

    result := 0;

end;



function SelectFolder(const Caption: string; const Root: WideString;

    var Directory: string): boolean;

var

    WindowList: Pointer;

    BrowseInfo: TBrowseInfo;

    Buffer: PChar;

    OldErrorMode: Cardinal;

    RootItemIDList, ItemIDList: PItemIDList;

    ShellMalloc: IMalloc;

    IDesktopFolder: IShellFolder;

    Eaten, Flags: LongWord;

begin

    Result := False;

    if not DirectoryExists(Directory) then

    Directory := '';

    FillChar(BrowseInfo, SizeOf(BrowseInfo), 0);

    if (ShGetMalloc(ShellMalloc) = S_OK) and (ShellMalloc <> nil) then

    begin

    Buffer := ShellMalloc.Alloc(MAX_PATH);

    try

        RootItemIDList := nil;

        if Root <> '' then

        begin

        SHGetDesktopFolder(IDesktopFolder);

        IDesktopFolder.ParseDisplayName(Application.Handle, nil,

        POleStr(Root), Eaten, RootItemIDList, Flags);

        end;

        with BrowseInfo do

        begin

        hwndOwner := Application.Handle;

        pidlRoot := RootItemIDList;

        pszDisplayName := Buffer;

        lpszTitle := PChar(Caption);

        ulFlags := BIF_RETURNONLYFSDIRS;

        if Directory <> '' then

        begin

        lpfn := SelectDirCB;

        lParam := Integer(PChar(Directory));

        end;

        end;

        WindowList := DisableTaskWindows(0);

        OldErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS);

        try

        ItemIDList := ShBrowseForFolder(BrowseInfo);

        finally

        SetErrorMode(OldErrorMode);

        EnableTaskWindows(WindowList);

        end;

        Result := ItemIDList <> nil;

        if Result then

        begin

        ShGetPathFromIDList(ItemIDList, Buffer);

        ShellMalloc.Free(ItemIDList);

        Directory := Buffer;

        end;

    finally

        ShellMalloc.Free(Buffer);

    end;

    end;

end;



procedure TForm1.Button1Click(Sender: TObject);

var

    ss: string;

begin

    ss := 'D:\BURN';

    if SelectFolder('Choose Folder','',ss) then

    showmessage('Your Choose is ' + ss);

end;



end.

Anyway, 多謝各位的幫忙

出0入0汤圆

发表于 2008-9-18 20:55:26 | 显示全部楼层
txt里可以用TStringList保存和读取

memo直接读他的内容就行了呀

本贴被 ilymy 编辑过,最后修改时间:2008-09-18,20:57:14.

出0入0汤圆

 楼主| 发表于 2008-9-18 20:50:25 | 显示全部楼层
顺便问下   怎么从MEMO 或 txt 读回数据 放到数组里呢? 我要把保存的数据画图 用Tchar    谢谢!

出0入0汤圆

 楼主| 发表于 2008-9-18 20:29:20 | 显示全部楼层
procedure TForm1.Button5Click(Sender: TObject);

var

  S:string;



begin



  S := edPath.Text;

  if not DirectoryExists(S) then

    CreateDir(S);  

  S:=S+'dt'+ edit2.text+'.txt';

  Memo1.Lines.SaveToFile(S);

  Application.MessageBox(pchar(s+#13#13#9+'已保存'),'信息',MB_ICONWARNING or MB_OK);

   END;





我是把COM来的数据显示到MEMO 再保存到txt    像串口调试助手的界面  就是不能得到路径



ilymy 你说的是 dialogs 的 SAVE控件吗 ?   

出0入0汤圆

发表于 2008-9-18 20:39:22 | 显示全部楼层
是啊,很好用的,简单

出0入0汤圆

发表于 2008-9-18 20:15:37 | 显示全部楼层
为什么不用它自带的保存控件?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 17:43

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表