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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? ogsrmgr.pas

?? 詳細(xì)的ERP設(shè)計(jì)資料
?? PAS
字號(hào):
{*********************************************************}
{* TurboPower String Resource Support: SRMGR.PAS 1.03    *}
{* Copyright (c) TurboPower Software Co 1996-1998        *}
{* All rights reserved.                                  *}
{*********************************************************}
{* SRMGR: TurboPower string resource runtime manager     *}
{*********************************************************}

{ --------------------------------------------------------------------
Notes:
  Loads string resources created by SRMC.EXE and BRCC[32]. See the
  comments in SRMC.PAS for additional information.

  Both Create() and ChangeResource take an instance (module) handle
  and a resource name. The resource from the module is then loaded. If
  the resource is not found an ETpsStringResourceError is raised.

  If you wish to alter our products' string resources to translate the
  strings into a different language then you have two choices. In an
  application written in Delphi 1 or Delphi 2 or Delphi 3 without
  packages then you can alter the .TXT files containing the strings,
  recompile them with our 32-bit SRMC utility to create an STR file,
  and then recompile the RC resource files (which 'include' the STR
  file) with Delphi's BRCC[32] program. Relink your application and it
  will then have strings in your language of preference. For an
  application created with Delphi 3 using packages, then the product
  packages cannot be recompiled and hence the string resources in
  those packages cannot be changed. This is where the ChangeResource
  method comes in. Create a whole new resource (it must have a
  different name than the one we use) in the manner described above.
  It will be linked into your application. Now in your application,
  say before the Application.Run call in your project, call
  ChangeResource for the string resource object you want to change and
  pass it the HInstance value of the application and the name of your
  new resource. From now on that string resource object will use your
  string resource instead of the original.

  GetWideChar(), available in 32-bit applications only, returns a
  UNICODE string directly from the resource.

  GetAsciiZ() converts the UNICODE (32-bit) or DBCS (16-bit) string
  from the resource into a DBCS null-terminated string using the
  default code page.

  GetString(), or the default Strings[] array property, also converts
  the string to a DBCS or SBCS string using the default code page.

  When the ReportError property is true, requesting a string whose
  identifier is not found causes an ETpsStringResourceError exception.
  When ReportError is false, no exception is generated but an empty
  string is returned.

  Based on TPSRES.PAS by Lee Inman.
  Written by Kim Kokkonen.
  --------------------------------------------------------------------
}

{$IFDEF Win32}
  {include the resource compiled using BRCC32.EXE and SRMC.EXE}
  {$R OGSRMGR.R32}
{$ELSE}
  {include the resource compiled using BRCC.EXE and SRMC.EXE}
  {$R OGSRMGR.R16}
{$ENDIF}

{$R-,S-,I-}

{$IFDEF Win32}
  {$H+} {Long strings}                                                 {!!.02}
{$ENDIF}

{For BCB 3.0 package support.}
{$IFDEF VER110}
  {$ObjExportAll On}
{$ENDIF}

{$IFNDEF VER80}   {Delphi 1}
 {$IFNDEF VER90}  {Delphi 2}
  {$IFNDEF VER93} {BCB 1}
    {$DEFINE VERSION3} { Delphi 3.0 or BCB 3.0 or higher }
  {$ENDIF}
 {$ENDIF}
{$ENDIF}

unit OgSrMgr;

interface

uses
  {$IFDEF WIN32} Windows, {$ELSE} WinProcs, WinTypes, {$ENDIF}
  Classes, SysUtils;

const
  DefReportError = False;

  {id at start of binary resource; must match SRMC}
  ResID : array[0..3] of char = 'STR0';

type
  ETpsStringResourceError = class(Exception);

{$IFDEF Win32}
  TInt32 = Integer;
{$ELSE}
  TInt32 = LongInt;
{$ENDIF}

  PIndexRec = ^TIndexRec;
  TIndexRec = record
    id : TInt32;
    ofs: TInt32;
    len: TInt32;
  end;
  TIndexArray = array[0..(MaxInt div SizeOf(TIndexRec))-2] of TIndexRec;

  PResourceRec = ^TResourceRec;
  TResourceRec = record
    id : array[0..3] of char;
    count : LongInt;
    index : TIndexArray;
  end;

  TOgStringResource = class
  private
    {property variables}
    FReportError  : Boolean;             {true to raise exception if string not found}

    {internal variables}
    srHandle      : THandle;             {handle for TPStrings resource}
    srP           : PResourceRec;        {pointer to start of resource}

    {internal methods}
    procedure srCloseResource;
    function srFindIdent(Ident : TInt32) : PIndexRec;
    procedure srLock;
    procedure srLoadResource(Instance : THandle; const ResourceName : string);
    procedure srOpenResource(Instance : THandle; const ResourceName : string);
    procedure srUnLock;

  public
    constructor Create(Instance : THandle; const ResourceName : string); virtual;
    destructor Destroy; override;
    procedure ChangeResource(Instance : THandle; const ResourceName : string);

    function GetAsciiZ(Ident : TInt32; Buffer : PChar; BufChars : Integer) : PChar;

    function GetString(Ident : TInt32) : string;
    property Strings[Ident : TInt32] : string
      read GetString; default;
{$IFDEF Win32}
    function GetWideChar(Ident : TInt32; Buffer : PWideChar; BufChars : Integer) : PWideChar;
{$ENDIF}

    property ReportError : Boolean
      read FReportError
      write FReportError;
  end;

var
  TpsResStrings : TOgStringResource; {error strings for this unit}

{====================================================================}

implementation

{*** TOgStringResource ***}

procedure TOgStringResource.ChangeResource(Instance : THandle; const ResourceName : string);
begin
  srCloseResource;
  if ResourceName <> '' then
    srOpenResource(Instance, ResourceName);
end;

constructor TOgStringResource.Create(Instance : THandle; const ResourceName : string);
begin
  inherited Create;
  FReportError := DefReportError;
  ChangeResource(Instance, ResourceName);
end;

destructor TOgStringResource.Destroy;
begin
  srCloseResource;
  inherited Destroy;
end;

{$IFDEF Win32}
procedure WideCopy(Dest, Src : PWideChar; Len : Integer);
begin
  while Len > 0 do begin
    Dest^ := Src^;
    inc(Dest);
    inc(Src);
    dec(Len);
  end;
  Dest^ := #0;
end;

function TOgStringResource.GetWideChar(Ident : TInt32;
  Buffer : PWideChar; BufChars : Integer) : PWideChar;
var
  OLen : Integer;
  P : PIndexRec;
begin
  srLock;
  try
    P := srFindIdent(Ident);
    if P = nil then
      Buffer[0] := #0

    else begin
      OLen := P^.len;
      if OLen >= BufChars then
        OLen := BufChars-1;
      WideCopy(Buffer, PWideChar(PChar(srP)+P^.ofs), OLen);
    end;
  finally
    srUnLock;
  end;

  Result := Buffer;
end;

function TOgStringResource.GetAsciiZ(Ident : TInt32;
  Buffer : PChar; BufChars : Integer) : PChar;
var
  P : PIndexRec;
  Src : PWideChar;
  Len, OLen : Integer;
begin
  srLock;
  try
    P := srFindIdent(Ident);
    if P = nil then
      OLen := 0

    else begin
      Src := PWideChar(PChar(srP)+P^.ofs);
      Len := P^.len;

      {see if entire string fits in Buffer}
      OLen :=  WideCharToMultiByte(CP_ACP, 0, Src, Len, nil, 0, nil, nil);

      while OLen >= BufChars do begin
        {reduce length to get what will fit}
        dec(Len);
        OLen :=  WideCharToMultiByte(CP_ACP, 0, Src, Len, nil, 0, nil, nil);
      end;

      {copy to buffer}
      OLen := WideCharToMultiByte(CP_ACP, 0, Src, Len, Buffer, BufChars, nil, nil)
    end;
  finally
    srUnLock;
  end;

  {null terminate the result}
  Buffer[OLen] := #0;
  Result := Buffer;
end;

function TOgStringResource.GetString(Ident : TInt32) : string;
var
  P : PIndexRec;
  Src : PWideChar;
  Len, OLen : Integer;
begin
  srLock;
  try
    P := srFindIdent(Ident);
    if P = nil then
      Result := ''

    else begin
      Src := PWideChar(PChar(srP)+P^.ofs);
      Len := P^.len;
      OLen :=  WideCharToMultiByte(CP_ACP, 0, Src, Len, nil, 0, nil, nil);
      SetLength(Result, OLen);
      WideCharToMultiByte(CP_ACP, 0, Src, Len, PChar(Result), OLen, nil, nil);
    end;
  finally
    srUnLock;
  end;
end;

{$ELSE}

function TOgStringResource.GetAsciiZ(Ident : TInt32;
  Buffer : PChar; BufChars : Integer) : PChar;
var
  OLen : Integer;
  P : PIndexRec;
begin
  srLock;
  try
    P := srFindIdent(Ident);
    if P = nil then
      Buffer[0] := #0
    else begin
      OLen := P^.len;
      if OLen >= BufChars then
        OLen := BufChars-1;
      StrLCopy(Buffer, PChar(srP)+P^.ofs, OLen);
      Buffer[OLen] := #0;
    end;
  finally
    srUnLock;
  end;

  Result := Buffer;
end;

function TOgStringResource.GetString(Ident : TInt32) : string;
var
  OLen : Integer;
  Src : PChar;
  P : PIndexRec;
begin
  srLock;
  try
    P := srFindIdent(Ident);
    if P = nil then
      Result := ''
    else begin
      OLen := P^.len;
      if OLen > 255 then
        OLen := 255;
      Result[0] := Char(OLen);
      Src := PChar(srP)+P^.ofs;
      move(Src^, Result[1], OLen);
    end;
  finally
    srUnLock;
  end;
end;

{$ENDIF}

procedure TOgStringResource.srCloseResource;
begin
  while Assigned(srP) do
    srUnLock;

  if srHandle <> 0 then begin
    FreeResource(srHandle);
    srHandle := 0;
  end;
end;

function TOgStringResource.srFindIdent(Ident : TInt32) : PIndexRec;
var
  L, R, M : TInt32;
begin
  {binary search to find matching index record}
  L := 0;
  R := srP^.count-1;
  while L <= R do begin
    M := (L+R) shr 1;
    Result := @srP^.index[M];
    if Ident = Result^.id then
      exit;
    if Ident > Result^.id then
      L := M+1
    else
      R := M-1;
  end;

  {not found}
  Result := nil;
  if FReportError then
    raise ETpsStringResourceError.CreateFmt(TpsResStrings[1], [Ident]);
end;

procedure TOgStringResource.srLock;
begin
  srP := LockResource(srHandle);
  if not Assigned(srP) then
    raise ETpsStringResourceError.Create(TpsResStrings[2]);
end;

procedure TOgStringResource.srLoadResource(Instance : THandle; const ResourceName : string);
var
  H : THandle;
  Buf : array[0..255] of Char;
begin
  StrPLCopy(Buf, ResourceName, SizeOf(Buf)-1);
  {$IFDEF VERSION3}  { resource DLL mechanism started in D3 }
  {if not ModuleIsPackage then }                                                        {!!.04}
  Instance := FindResourceHInstance(Instance);  { get loaded Resource DLL if any }
  {$ENDIF}
  H := FindResource(Instance, Buf, RT_RCDATA);  { attempt to load resource }
  if H = 0 then begin  { not found }
    {$IFDEF VERSION3}                                                                   {!!.04}
    Instance := HInstance;                                                              {!!.04}
    H := FindResource(Instance, Buf, RT_RCDATA);  { try to find it in the main binary } {!!.04}
    if H = 0 then  { still not found?}
    {$ENDIF}                                                                            {!!.04}
      raise ETpsStringResourceError.CreateFmt(TpsResStrings[3], [ResourceName]);  { whine }
  end;
  srHandle := LoadResource(Instance, H);
  if srHandle = 0 then
    raise ETpsStringResourceError.CreateFmt(TpsResStrings[4], [ResourceName]);
end;

procedure TOgStringResource.srOpenResource(Instance : THandle; const ResourceName : string);
begin
  {find and load the resource}
  srLoadResource(Instance, ResourceName);

  {confirm it's in the correct format}
  srLock;
  try
    if srP^.id <> ResId then
      raise ETpsStringResourceError.Create(TpsResStrings[5]);
  finally
    srUnLock;
  end;
end;

procedure TOgStringResource.srUnLock;
begin
  if not UnLockResource(srHandle) then
    srP := nil;
end;

procedure FreeTpsResStrings; far;
begin
  TpsResStrings.Free;
end;


initialization
  TpsResStrings := TOgStringResource.Create(HInstance, 'OGSRMGR_STRINGS');{!!.01}

{$IFDEF Win32}
finalization
  FreeTpsResStrings;
{$ELSE}
  AddExitProc(FreeTpsResStrings);
{$ENDIF}

end.

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品美国一| 欧美人伦禁忌dvd放荡欲情| 久久久综合网站| 激情久久五月天| 久久精品亚洲麻豆av一区二区 | 欧美亚洲日本国产| 亚洲伦在线观看| 欧美乱熟臀69xxxxxx| 性做久久久久久久免费看| 欧美高清视频在线高清观看mv色露露十八 | 国产激情偷乱视频一区二区三区| 精品国产sm最大网站| 成人涩涩免费视频| 亚洲国产成人av网| 日韩三级视频在线观看| 国产91清纯白嫩初高中在线观看| 亚洲日穴在线视频| 91精品国产品国语在线不卡| 精品一区二区三区日韩| 日韩国产精品大片| 日韩三级精品电影久久久| 国产一区二区三区日韩| 亚洲精品乱码久久久久久久久 | 欧美xxxx老人做受| 99精品视频一区二区| 亚洲第一二三四区| 久久久99免费| 欧美在线制服丝袜| 国产一区二区美女诱惑| 亚洲成人免费在线| 国产女主播视频一区二区| 欧美性大战久久久久久久| 国产麻豆成人传媒免费观看| 亚洲欧美欧美一区二区三区| 精品欧美一区二区在线观看 | 国产剧情一区在线| 亚洲国产另类精品专区| 国产欧美一区视频| 91精品国产一区二区| www.色精品| 激情图片小说一区| 天堂精品中文字幕在线| 亚洲欧美日本韩国| 国产色产综合色产在线视频| 在线观看三级视频欧美| 国产a久久麻豆| 免费视频一区二区| 人禽交欧美网站| 亚洲视频在线观看一区| 精品日韩欧美一区二区| 欧美日韩在线免费视频| 99久久婷婷国产| 国产精品亚洲成人| 蜜臀久久99精品久久久久宅男| 一区二区三区小说| 中文字幕中文字幕一区二区| 日韩精品资源二区在线| 欧美一三区三区四区免费在线看| 成人小视频在线| 日韩免费一区二区| 国产精品自在在线| 久久久久久久久蜜桃| 国产麻豆视频一区二区| 亚洲免费av观看| 奇米亚洲午夜久久精品| 欧美日韩国产经典色站一区二区三区| 麻豆国产欧美日韩综合精品二区| 精品国产一区二区精华 | 91视频在线观看免费| 亚洲色图欧美在线| 国产精品久久久久影院| 国产精品久久久久9999吃药| 欧美高清在线视频| 99久久精品情趣| 国产精品原创巨作av| 午夜精品国产更新| 欧美三级视频在线| 日韩精品福利网| 国产日韩精品久久久| 麻豆视频观看网址久久| 国产婷婷色一区二区三区在线| 日韩一级高清毛片| 久久91精品久久久久久秒播| 日韩精品亚洲一区二区三区免费| 精品欧美一区二区在线观看 | 激情综合亚洲精品| 国产精品主播直播| 久久97超碰色| 成人性生交大合| 成人h版在线观看| 国产乱子伦一区二区三区国色天香| 亚洲成人777| 一区二区三区高清不卡| 欧美一级免费观看| 欧美性大战久久| 一本久久a久久精品亚洲| 亚洲一级二级三级在线免费观看| 欧美一区二区视频免费观看| 欧美日韩国产高清一区二区| 高清国产一区二区三区| 日韩影院免费视频| 亚洲精品久久嫩草网站秘色| 国产精品传媒入口麻豆| 国产精品拍天天在线| 欧美一级欧美一级在线播放| 精品影院一区二区久久久| 亚洲成人在线网站| 国产高清亚洲一区| 成人av在线资源网站| 成人国产精品免费观看动漫| 在线观看一区日韩| 欧美一区二区三区性视频| 91精品国产乱| 亚洲免费观看视频| 成人欧美一区二区三区白人 | 午夜激情久久久| 久久精品人人做人人综合| 欧美国产成人在线| 亚洲国产wwwccc36天堂| 91在线视频官网| 久久超级碰视频| 97久久超碰国产精品| 3d动漫精品啪啪一区二区竹菊 | 一区二区三区小说| 韩国av一区二区三区| 欧洲一区在线电影| 国产日韩精品一区二区三区| 亚洲v中文字幕| 99精品1区2区| 日韩国产精品久久久| 国产精品 欧美精品| 在线观看亚洲a| 日本一区二区三区四区在线视频| 亚洲激情综合网| 国产成人在线视频网站| 91麻豆精品国产91久久久| 成人免费在线播放视频| 国产自产视频一区二区三区| 欧美日韩你懂得| 亚洲欧美综合网| 热久久免费视频| 在线观看国产一区二区| 国产日本一区二区| 免费的国产精品| 欧美三级在线看| 亚洲丝袜另类动漫二区| 国产精品亚洲人在线观看| 日韩一区二区在线观看视频| 一区二区三区色| av爱爱亚洲一区| 中文字幕精品一区| 国产一区二区不卡老阿姨| 7777女厕盗摄久久久| 亚洲va天堂va国产va久| 色就色 综合激情| 中文字幕亚洲区| 成人激情图片网| 国产女主播一区| 国产91在线观看丝袜| 国产亚洲欧美色| 国产精一区二区三区| 久久综合九色综合欧美亚洲| 蜜桃av一区二区三区电影| 7799精品视频| 日本中文一区二区三区| 欧美丰满一区二区免费视频 | 激情av综合网| 337p粉嫩大胆噜噜噜噜噜91av| 日本不卡高清视频| 在线91免费看| 蜜桃视频一区二区三区 | 国产午夜亚洲精品不卡| 国产福利精品导航| 国产精品久久久久久久裸模| 国产成人免费视频一区| 中文字幕久久午夜不卡| 大胆欧美人体老妇| 亚洲视频一区在线观看| 在线亚洲免费视频| 中文一区在线播放| 免费观看在线色综合| 欧美一二三区在线观看| 久久黄色级2电影| 久久久久99精品一区| 福利电影一区二区| 亚洲色图.com| 在线免费亚洲电影| 日本成人在线网站| 久久久久久99久久久精品网站| 一本一本大道香蕉久在线精品 | 欧美一区二区三区不卡| 国内精品久久久久影院薰衣草| 日本一区二区三区四区| 色播五月激情综合网| 日本一区中文字幕 | 国产精品乱码妇女bbbb| 91一区二区三区在线播放| 亚洲午夜精品一区二区三区他趣| 欧美一区二区三区爱爱| 成人午夜免费电影|