delphi打开文件的各种方法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi打开文件的各种方法?相关的知识,希望对你有一定的参考价值。

目前发现有两种方法:

方法1,定义一个文件变量F,assign(F,fileName);reset(F,1);

方法2,定义一个文件句柄,fHandle,
fHandle:=FlieOpen(fileName,fmReadandWrite);

我的问题是,两种方法都可以读、写文件,而且两种方法的实现各种功能的函数和过程名称很类似,如seek(),fileseek();fileopen(),openfile();好像就非把你搞头晕一样。那为什么还要搞两种方法?他们有什么区别?

肯定有区别,只是我研究的不深。

  第一种方法,使用SelectDirectory 函数 ,在ShellApi中
  procedure TForm2.BtSelectPathClick(Sender: TObject);
var
strCaption,strDirectory:String;
wstrRoot:WideString;
begin
strCaption:='这是浏览文件夹的说明文字,可以根据需要进行书写。'
+#13#10+'一般二行文字就满了。';
//该参数是浏览文件夹窗口的显示说明部分
wstrRoot:='';
//这个参数表示所显示的浏览文件夹窗口中的根目录,默认或空表示“我的电脑”。
SelectDirectory(strCaption,wstrRoot,strDirectory);
EdLocalPath.Text:=strDirectory;
end;
  
  第二种方法
  要求:利用Win32 API SHBrowseForFolder开启一个选择文件目录的对话框,预先定位到默认的目录,最后返回所选择的结果,如果没有进行选择(即单击“取消”结束选择)则返回空''。
代码如下:(以下两个函数定义需要在uses中引入两个单元ShlObj,Windows;)
function BrowseCallbackProc(Wnd: HWND; uMsg: UINT; lParam, lpData: LPARAM): Integer stdcall;
begin
case uMsg of
BFFM_INITIALIZED: SendMessage(Wnd, BFFM_SETSELECTION, 1, lpData);
end;
Result := 0;
end;
  function BrowsFolder(const Folder: string): string;
var
TitleName: string;
lpItemID: PItemIDList;
BrowseInfo: TBrowseInfo;
DisplayName: array[0..MAX_PATH] of char;
TempPath: array[0..MAX_PATH] of char;
begin
Result := Folder;
FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
BrowseInfo.hwndOwner := GetActiveWindow;
BrowseInfo.pszDisplayName := @DisplayName;
TitleName := '请选择一个目录';
BrowseInfo.lpszTitle := PChar(TitleName);
BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;
BrowseInfo.lpfn := BrowseCallbackProc;
BrowseInfo.lParam := Integer(PChar(Folder));
lpItemID := SHBrowseForFolder(BrowseInfo);
if Assigned(lpItemId) then
begin
SHGetPathFromIDList(lpItemID, TempPath);
GlobalFreePtr(lpItemID);
Result := string(TempPath);
end
else
Result:='';
end;
函数BrowsFolder是主体,传入参数即默认的目录,返回值即选择的结果。
  BrowseCallbackProc是由SHBrowseForFolder执行时需要的回调(Call Back)函数。在这个函数中,截取了BFFM_INITIALIZED消息,在目录选择对话框初始化的时候,向对话框发送一个BFFM_SETSELECTION消息,选中默认的目录。
参考技术A assign(F,fileName);reset(F,1);
这个是pascal的文件操作方式

fHandle:=FlieOpen(fileName,fmReadandWrite);
这个是windows API的方式.

区别基本 没有,用pascal的操作方式把.本回答被提问者采纳
参考技术B 那种都行,能用就好 参考技术C 最好还是用TFileStream

介绍ArcGIS中各种数据的打开方法——tin(栅格文件)

4、加载栅格文件

栅格数据是GIS中重要的数据源之一,如卫星图像扫描的地图照片等。

栅格数据常见的格式有Bmp、Tiff、Jpg、Grid等。

添加栅格数据主要使用Rasterlayer 组件类,以及IMap、ILayer、IRasterLayer接口等。Rasterlayer组件类实现了ILayer、IRasterlayer、TTable、IDataset等接口,主要用于栅格数据的打开、显示、操作状态等设置。

介绍一种打开栅格文件的方法

 

核心代码:

 

#region 添加TIN数据
        private void 添加TIN数据toolStripLabel1_Click(object sender, EventArgs e)
        {
            //方法:
            AddTinFile();
        }
        /// <summary>
        /// 加载栅格图层
        /// </summary>
        private void AddTinFile()
        {
            this.Cursor = Cursors.WaitCursor;
            IWorkspaceFactory pWorkspaceFactory = new TinWorkspaceFactoryClass();

            IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(m_Path, 0);
            ITinWorkspace pTinWorkspace = pWorkspace as ITinWorkspace;
            //声明一个pTin变量, 存储所打开的"tin"
            ITin pTin = pTinWorkspace.OpenTin("tin");
            //将TIN变为TIN图层
            ITinLayer pTinLayer = new TinLayerClass();
            pTinLayer.Dataset = pTin;
            pTinLayer.Name = "TIN";
            //也可以用三维空间AxSceneControl加载
            //axSceneControl1.Scene.AddLayer(pTinLayer, true);
            this.axMapControl1.AddLayer(pTinLayer);
            this.Cursor = Cursors.Default;

        }

        #endregion

 

加载Tin文件到SceneControll对象和到MapControl对象的方法大同小异。

只需要将

this.axMapControl1.AddLayer(pTinLayer);

换成

axSceneControl1.Scene.AddLayer(pTinLayer, true);

补充说明:

需从工具箱中拖曳SceneControl到界面窗口,自动生成SceneControll对象。

Tin文件的加载需要用到两个组件类:Scene和SceneGraph。

Scene是一个矢量、栅格和图形数据显示与处理的容器,该类实现了IScene接口,提供了控制 Scene的方法和属性,如Addlayer方法用于向场景中增加一个图层。

SceneGraph是一个记录在Scene中出现的数据和事件的容器,该类实现了ISceneGraph接口,提供了控制和处理Scene中图形的方法和属性。

 

效果图:

技术图片

 

 

 

谢谢观看!本人初学GIS二次开发,如果有不对的地方,请多多包涵!

以上是关于delphi打开文件的各种方法?的主要内容,如果未能解决你的问题,请参考以下文章

问一下,delphi怎么打开frame

如何用delphi打开pas文件

delphi中如何打开其他文件

delphi打开文件

我在用delphi2007打开一个delphi工程文件的时候,出现下列错误: 请高手指点

delphi软件打开文件全是乱码