delphi打开文件的各种方法?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi打开文件的各种方法?相关的知识,希望对你有一定的参考价值。
目前发现有两种方法:
方法1,定义一个文件变量F,assign(F,fileName);reset(F,1);
方法2,定义一个文件句柄,fHandle,
fHandle:=FlieOpen(fileName,fmReadandWrite);
我的问题是,两种方法都可以读、写文件,而且两种方法的实现各种功能的函数和过程名称很类似,如seek(),fileseek();fileopen(),openfile();好像就非把你搞头晕一样。那为什么还要搞两种方法?他们有什么区别?
肯定有区别,只是我研究的不深。
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打开文件的各种方法?的主要内容,如果未能解决你的问题,请参考以下文章