亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? multilangtranslator_clx.pas

?? 一個開源軟件
?? PAS
字號:
unit MultilangTranslator;
(*
   Author: Beat Straehl, 
           Kleiner, armasuisse
           max@kleiner.com
   Date:  Mai 2003
          juni 2005, resources, pascal analyzer, spain extension
          juli 2006, Max Kleiner Framework FIS-HE
          aug  2006  set Spain, more comps., resolve update problem
          sep  2006 dynamic change in same form on instance
          Jan 2007 small changes for Lazarus 0.9
          April 2007 available for Kylix /Linux
          locs= 366, 15.04.2007

   Description:
    Changing the language of strings(caption, hint, lines ...) of controls on
    a form to a particular language. The Tag property of the controls has to
    be set to values corresponding with the according resource strings.
    Leaving a Tag value 0 means that the caption of the according control
    isn't changed. Note that languages are distinguished by an offset of a
    multiple of 1000. For instance german is 0, English has an offset of 1000,
    French has one of 2000 and Italian's offset is 3000. If a Tag is set to
    the value of a language resource string this multiple of 1000 has
    to be omitted. An example:

    Extract of a resource file *.rc:
    1, "Inhalt"
    1001, "Content"
    2001, "Contenu"
    3001, "Contenido"    
    4001, "Contenudo"
    In this case to a Tag of a control which should show this text in the proper
    language we have to assign the value 1. This can be done with the ObjectInspector.

    Currently TMultilangSC supports the controls in :
       procedure ChangeComponent(theComponent: TComponent;
                           const theLanguageOffset : integer);

    This concept can be easily extended to other controls not listed
    in procedure ChangeComponent.

    Languages string are assigned to the particular captions after a forms
    has been loaded from the resources. However its possible to use
    the function GetResourceString at any time to load language dependend
    strings from the language resource file. This is especially necessary
    if TMultiLangSC is used independendly from a TForm.

   Version: 1.4, Implementation with Comp or by runtime for Kylix
*)

interface

uses
  SysUtils, Classes, LibC;

type
  tLanguageChanging = procedure(Sender: TObject; theComponent: TComponent) of object;
  tLanguageChanged = procedure(Sender: TObject) of object;

  TMultilangSC = class(TComponent)
  private
    fLanguage: integer;
    fOnLanguageChanging: tLanguageChanging;
    fOnLanguageChanged: tLanguageChanged;
    procedure SetLanguage(const Value: integer);
    procedure ChangeLanguage(const languageOffset: integer);
    procedure ChangeComponent(theComponent: TComponent;
                                const theLanguageOffset : integer);
    function GetTopComponent: TComponent;
    function GetResourceString(Ident: Integer): string;
    { Private declarations }
  protected
    //Loaded Initializes the component after the form file has been
    //read into memory.
    procedure Loaded; override;
  public
    constructor Create(AOwner: TComponent); override;
    property LanguageOffset: integer read fLanguage write SetLanguage;
  published
    { Published in ObjectInspector}
    property OnLanguageChanging: tLanguageChanging read fOnLanguageChanging write fOnLanguageChanging;
    property OnLanguageChanged: tLanguageChanged read fOnLanguageChanged write fOnLanguageChanged;
  end;

  PStrData = ^TStrData;
  TStrData = record
    Ident: Integer;
    Str: string;
  end;

procedure Register;

  //var objMultilang: TMultilangSC;

implementation

Uses QForms, QStdCtrls, QComCtrls, QExtCtrls;
// START resource s tring wizard section

resourcestring
  SSecLangDep_Language = 'Language';
  SSecLangDep_SecureCenterXP = 'SecureCenterXP';
  SSecLangDep_SOFTWAREGSTSecureCenterXP = '\SOFTWARE\GST\SecureCenterXP';

// END resource string wizard section


procedure Register;
begin
  RegisterComponents(SSecLangDep_SecureCenterXP, [TMultilangSC]);
end;

{ TMultiLangSC}

constructor TMultiLangSC.Create(AOwner: TComponent);
// this creates an instance of TSecureLanguageDepenend and initializes
// its member variables.
begin
  inherited;
  fLanguage:= 0;
  fOnLanguageChanging:= NIL;
  fOnLanguageChanged:= NIL;
end;


procedure TMultilangSC.SetLanguage(const Value: integer);
// changes the language of a component tree (usually a form)
begin
  fLanguage:= Value;
  if not (csLoading in ComponentState) then
    ChangeLanguage(fLanguage);
end;


function EnumStringModules(Instance: Longint; Data: Pointer): Boolean;
var
  rs: TResStringRec;
  Module: HModule;
begin
  Module:= Instance;
  rs.Module:= @Module;
  with PStrData(Data)^ do begin
    rs.Identifier:= Ident;
    Str:= System.LoadResString(@rs);
    Result:= Str ='';
    //Result:= Str;
  end;
end;

function TMultilangSC.GetResourceString(Ident: Integer): string;
var
  StrData: TStrData;
begin
  StrData.Ident:= Ident + LanguageOffset;
  StrData.Str:= '';
  EnumResourceModules(EnumStringModules, @StrData);
  Result:= StrData.Str;
end;


function TMultilangSC.GetTopComponent: TComponent;
// searches upwards through a tree of components until its root is found
// or a component is of type TForm.
var x: TComponent;
begin
  x:= Self;
  Result:= x; // prevent compiler warning
  while (Assigned(x)) and not (x is TForm) do begin
    Result:= x;
    x:= x.Owner;
  end;
  if Assigned(x) then
    Result:= x;
end;

procedure TMultilangSC.ChangeLanguage(const languageOffset: integer);
// this method changes the language of a component tree, if we are not in design mode.
// after the whole tree of components has been change the event fOnLanguageChanged is
// called, if a value has been assigned to it. This give the client the opportunity
// to do his own language specific text assignments using GetResourceString.
begin
  if not (csDesigning in ComponentState) then begin
     ChangeComponent(GetTopComponent,languageOffset);
     if Assigned(fOnLanguageChanged) then
       fOnLanguageChanged(Self);
  end;
end;

procedure TMultilangSC.ChangeComponent(theComponent: TComponent;
                             const theLanguageOffset: integer);
// this function changes the language of the components text fields recursively.
// for every component an event fOnLanguageChanging is called if a handler was
// assigned to it. This gives the client the opportunity to do additional language
// specific treatments on a component level. If for instance a component is a grid,
// the client can use this event to test whether this grid is the current processed
// component and if true he could use the opportunity to change column or
// row names using GetResourceString
var x : integer;
begin
  if theComponent.ComponentCount > 0 then begin
    for x:= 0 to theComponent.ComponentCount-1 do
      ChangeComponent(theComponent.Components[x], theLanguageOffset);
  end;
  if theComponent.tag <> 0 then begin
    if (theComponent is TForm) then
      (theComponent as TForm).Caption:= GetResourceString(theComponent.tag)
    else if (theComponent is TLabel) then
      (theComponent as TLabel).Caption:= GetResourceString(theComponent.tag)
    else if (theComponent is TCheckBox) then
      (theComponent as TCheckBox).Caption:= GetResourceString(theComponent.tag)
    else if (theComponent is TToolButton) then
      (theComponent as TToolButton).Hint:= GetResourceString(theComponent.tag)
    else if (theComponent is TButton) then
      (theComponent as TButton).Caption:= GetResourceString(theComponent.tag)
    else if (theComponent is TRadioButton) then
      (theComponent as TRadioButton).Caption:= GetResourceString(theComponent.tag)
    else if (theComponent is TGroupBox) then
      (theComponent as TGroupBox).Caption:= GetResourceString(theComponent.tag)
    else if (theComponent is TPanel) then
      (theComponent as TPanel).Caption:= GetResourceString(theComponent.tag)
    else if (theComponent is TTabSheet) then
      (theComponent as TTabSheet).Caption:= GetResourceString(theComponent.tag)
    else if (theComponent is TImage) then
      (theComponent as TImage).Hint:= GetResourceString(theComponent.tag)
    else if (theComponent is TRadioGroup) then
      (theComponent as TRadioGroup).caption:=
                                       GetResourceString(theComponent.tag)
    else if (theComponent is TPaintBox) then
      (theComponent as TPaintBox).Hint:= GetResourceString(theComponent.tag);

    if Assigned(fOnLanguageChanging) then
      fOnLanguageChanging(Self, theComponent);
  end;
end;

procedure TMultilangSC.Loaded;
begin
  inherited;
  //LanguageOffset:= currentLanguage;
end;







initialization
  //objMultilang:= TMultiLangSC.Create(NIL);

finalization
  //objMultilang.Free;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美在线高清| 日韩毛片精品高清免费| 国产98色在线|日韩| 欧美乱熟臀69xxxxxx| 岛国一区二区在线观看| 日韩电影免费在线观看网站| 成人欧美一区二区三区| 国内成+人亚洲+欧美+综合在线| 国产精品99久久久| 日本亚洲免费观看| 亚洲色欲色欲www| 亚洲色大成网站www久久九九| 国产精品毛片久久久久久| 国产校园另类小说区| 中文在线资源观看网站视频免费不卡| 国产女主播视频一区二区| 国产精品女同一区二区三区| 欧美激情资源网| 亚洲色图色小说| 亚洲一区二区影院| 日韩成人一级片| 九九精品视频在线看| 国产91高潮流白浆在线麻豆 | 色综合久久久久网| 欧美视频在线不卡| 日韩欧美在线不卡| 国产日韩欧美电影| 国产亚洲综合在线| 国产精品视频一区二区三区不卡| 欧美经典一区二区| 亚洲综合清纯丝袜自拍| 五月激情六月综合| 日韩高清在线电影| 激情图区综合网| 99久久精品99国产精品 | 欧美国产欧美综合| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 亚洲香肠在线观看| 日韩成人伦理电影在线观看| 精品一区二区三区在线观看| 从欧美一区二区三区| 在线免费观看视频一区| 日韩精品在线看片z| 国产精品少妇自拍| 日本特黄久久久高潮| 99久久婷婷国产综合精品| 欧美精品一级二级三级| 日本一二三四高清不卡| 香蕉影视欧美成人| 国产91露脸合集magnet| 欧美精品久久99| 亚洲欧美在线视频观看| 蜜臀av一区二区在线免费观看| 成人黄色软件下载| 欧美变态tickling挠脚心| 亚洲免费在线看| 久久精工是国产品牌吗| 91网站最新地址| 国产成人aaa| 日本一二三四高清不卡| 欧美va亚洲va在线观看蝴蝶网| 欧美一区二区三区四区高清| 中文字幕电影一区| 欧美aaa在线| 91精品福利视频| 久久嫩草精品久久久久| 亚洲观看高清完整版在线观看| 国产成人欧美日韩在线电影| 在线播放/欧美激情| 综合中文字幕亚洲| 日韩黄色一级片| 亚洲人成小说网站色在线| 国产精品麻豆久久久| 日日夜夜免费精品视频| 欧洲精品视频在线观看| 美女视频第一区二区三区免费观看网站| 亚洲国产一二三| 成人h精品动漫一区二区三区| 日韩片之四级片| 午夜精品123| 91捆绑美女网站| 精品一区二区三区蜜桃| 91精品免费观看| 成人看片黄a免费看在线| 午夜av一区二区三区| 色一区在线观看| 亚洲国产精品久久久久秋霞影院| 色综合久久久久综合体| 国产伦精品一区二区三区免费| 欧美影院一区二区| 午夜精品福利久久久| 日韩欧美成人激情| 99久久99久久久精品齐齐| www.爱久久.com| 欧美激情综合网| 国产69精品久久久久777| 精品国产在天天线2019| 蜜臀精品久久久久久蜜臀| 欧美精选午夜久久久乱码6080| 亚洲大片精品永久免费| 欧美亚洲国产一卡| 亚洲一区二区在线免费观看视频 | 国产91丝袜在线播放0| 久久亚洲捆绑美女| 狠狠久久亚洲欧美| 精品99久久久久久| 国产乱子轮精品视频| 久久久久成人黄色影片| 国产a区久久久| 中文字幕亚洲不卡| 91一区二区三区在线播放| 又紧又大又爽精品一区二区| 欧美性色aⅴ视频一区日韩精品| 亚洲综合精品自拍| 欧美丰满少妇xxxbbb| 毛片基地黄久久久久久天堂| 26uuu欧美日本| 国产成人av网站| 亚洲视频一区在线观看| 欧美午夜一区二区三区| 蜜桃一区二区三区在线| 2021中文字幕一区亚洲| 99久久精品免费看| 亚洲一二三四区| 日韩一区二区三区电影在线观看| 久久精品国产亚洲高清剧情介绍 | 亚洲精品乱码久久久久久日本蜜臀| 日本道色综合久久| 人人狠狠综合久久亚洲| 久久久五月婷婷| 91网站最新地址| 麻豆精品在线看| 亚洲欧洲性图库| 欧美精选在线播放| 国产福利精品一区| 一区二区三区在线视频观看58| 欧美精品色一区二区三区| 激情六月婷婷久久| 亚洲欧洲中文日韩久久av乱码| 欧美肥妇free| 精品久久久网站| 欧美无砖专区一中文字| 国产欧美综合在线观看第十页| 精品国产一区二区亚洲人成毛片 | 久久99九九99精品| 亚洲图片有声小说| 蜜臀av一区二区在线免费观看| 日韩不卡手机在线v区| 国产精品99久久久| 日韩一区二区三区高清免费看看| 亚洲成av人综合在线观看| 337p日本欧洲亚洲大胆色噜噜| 成人av高清在线| 午夜精品视频在线观看| 亚洲精品在线观看网站| 色综合一个色综合| 免费人成在线不卡| 国产精品久99| 日韩欧美的一区二区| 色综合av在线| 国产高清精品网站| 日韩电影在线一区| 一区二区三区美女| 国产日韩欧美a| 欧美一区二区精品久久911| 91免费看`日韩一区二区| 久久国产精品区| 一区二区三区欧美日| 国产女人18水真多18精品一级做| 欧美中文字幕一二三区视频| 国产一区二区三区| 天天影视网天天综合色在线播放| 国产精品久久久久久久裸模| 日韩女优av电影| 欧美日韩综合不卡| 99视频有精品| 国产成a人无v码亚洲福利| 日韩电影网1区2区| 亚洲资源在线观看| 18欧美亚洲精品| 国产亚洲婷婷免费| 91精品国产欧美一区二区成人 | 欧美xingq一区二区| 欧美日韩在线直播| 日本道精品一区二区三区| 成人福利在线看| 国产成人小视频| 国内精品国产成人国产三级粉色 | 91激情在线视频| 成人免费的视频| 国产精品羞羞答答xxdd| 久久精品国产澳门| 天天av天天翘天天综合网色鬼国产 | 欧美精品亚洲二区| 日本二三区不卡| 91高清在线观看| 中文字幕一区日韩精品欧美| 久久久美女艺术照精彩视频福利播放| 欧美久久久一区| 欧美日韩激情一区|