Dephi资源文件中、高级应用篇

来源:计算机等级考试    发布时间:2012-08-28    计算机等级考试视频    评论

  第二步是Brcc32编译为Res文件后用上面的方法得到Dll文件,另外两个Dll用同样的方法生成.下面来应用一下:
  新建一个工程,放上五个Button:BtnOpen,BtnSave,BtnBig5,BtnGb32和BtnHelp.还有一个TComboBox:CbSelect用来选择语言种类的.
  具体代码如下:

  unit Unit1;
  interface
  ......
  private
  SHelp: string;
  function SearchLanguagePack: TStrings;
  procedure SetActiveLanguage(LanguageName: string);
  { Private declarations }
  ......
  implementation
  procedure TForm1.CbSelectChange(Sender: TObject);
  begin
  SetActiveLanguage(CbSelect.Text);//调用相应Dll文件读取相应字符.
  end;
  procedure TForm1.FormCreate(Sender: TObject);
  begin
  CbSelect.Items.AddStrings(SearchLanguagePack);//搜索当前目录下所有的Dll文件名称
  end;
  function TForm1.SearchLanguagePack: TStrings;
  var
  ResultStrings: TStrings;
  DosError: integer;
  SearchRec: TsearchRec;
  begin
  ResultStrings := TStringList.Create;
  DosError := FindFirst(ExtractFilePath(ParamStr(0)) + '*.dll', faAnyFile, SearchRec);
  while DosError = 0 do
  begin
  ResultStrings.Add(ChangeFileExt(SearchRec.Name, ''));
  DosError := FindNext(SearchRec);
  end;
  FindClose(SearchRec);
  Result := ResultStrings;
  end;

  procedure TForm1.SetActiveLanguage(LanguageName: string);
  var
  Hdll: Hmodule;
  MyChar: array[0..254] of char;
  DllFileName: string;
  begin
  DllFileName := ExtractFilePath(ParamStr(0)) + LanguageName + '.dll';
  if not FileExists(DllFileName) then Exit;
  Hdll := loadlibrary(Pchar(DllFileName));

  Loadstring(hdll, 1, MyChar, 254);
  Self.Caption := MyChar;
  //读取字符资源,1表示资源文件中定义的1
  Loadstring(hdll, 1, MyChar, 254);
  Self.Caption := MyChar;

  Loadstring(hdll, 2, MyChar, 254);
  BtnOpen.Caption := MyChar;

  Loadstring(hdll, 3, MyChar, 254);
  BtnSave.Caption := MyChar;

  Loadstring(hdll, 4, MyChar, 254);
  BtnBig5.Caption := MyChar;

  Loadstring(hdll, 5, MyChar, 254);
  BtnGb32.Caption := MyChar;

  Loadstring(hdll, 6, MyChar, 254);
  BtnHelp.Caption := MyChar;

  Loadstring(hdll, 7, MyChar, 254);
  SHelp := MyChar;

  Freelibrary(hdll);
  Application.Title := Self.Caption;
  //------------------------
  BtnOpen.Visible := True;
  BtnSave.Visible := True;
  BtnBig5.Visible := True;
  BtnGb32.Visible := True;
  BtnHelp.Visible := True;
  //------------------------
  end;
  procedure TForm1.BtnHelpClick(Sender: TObject);
  begin
  Application.MessageBox(Pchar(SHelp), 'Http://lovejingtao.126.com', MB_ICONINFORMATION);
  end;
  end.

  可能你会说,这种方法还不如我自己在程序中直接定义三种具体的值来的方便.甚至我自己自定义一个结构好了,用不着用DLL那么麻烦的。但是如果你的程序要用的字符很多呢?比如说Windows操作系统,本身就有简体中文,繁体中文,英文等等版本,用Dll的话只要直接替换DLL即可,而不用每发行一个版本就打开代码来修改一次。这样一来可以大大减少工作量和出错的机会.说到这里,再多说一句:Windows系统本身很多Dll带有了图片等资源,我们可以在程序中直接调用,这样一来我们的EXE也可以减少不少!当然最小的方法是实时生成技术.老外曾经写了一个67KB的程序就是利用了这个方法。

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答