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

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

?? rtfexportunit.pas

?? 用于oracle開發(fā)用于查詢數(shù)據(jù)庫編寫存儲過
?? PAS
字號:
// PL/SQL Developer (RTF) Export Plug-In
// Copyright 2003 Allround Automations
// support@allroundautomations.com
// http://www.allroundautomations.com

// This demo shows how to add a new export function to PL/SQL Developer
//
// The major export functions are:
//
//  RegisterExport
//  ExportInit
//  ExportFinished
//  ExportPrepare
//  ExportData
//
// for details see plugin.doc


unit RTFExportUnit;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, Grids, ExtCtrls, CheckLst, ComCtrls, Registry,
  ShellAPI, Menus, Variants;

type
  TConfigForm = class(TForm)
    TopPanel: TPanel;
    ButtonPanel: TPanel;
    RightPanel: TPanel;
    OKBtn: TButton;
    CancelBtn: TButton;
    procedure FormCreate(Sender: TObject);
  private
  public
  end;

var
  ConfigForm: TConfigForm = nil;
  PlugInID: Integer;
  ExportPath: string = '';

const // Window types
  wtSQL = 1;
  wtTest = 2;
  wtProcEdit = 3;
  wtCommand = 4;
  wtPlan = 5;

var // Declaration of PL/SQL Developer callback functions
  SYS_Version: function: Integer; cdecl;
  SYS_Registry: function: PChar; cdecl;
  SYS_RootDir: function: PChar; cdecl;
  SYS_OracleHome: function: PChar; cdecl;
  SYS_OCIDLL: function: PChar; cdecl;
  SYS_OCI8Mode: function: Bool; cdecl;

  IDE_MenuState: procedure(ID, Index: Integer; Enabled: Bool); cdecl;
  IDE_SetMenuVisible: procedure(ID, Index: Integer; Enabled: Bool); cdecl;
  IDE_SetMenuCheck: procedure(ID, Index: Integer; Enabled: Bool); cdecl;
  IDE_SetMenuName: procedure(ID, Index: Integer; Name: PChar); cdecl;
  IDE_RefreshMenus: procedure(ID: Integer); cdecl;
  IDE_GetMenuLayout: function: PChar; cdecl;
  IDE_Connected: function: Bool; cdecl;
  IDE_GetConnectionInfo: procedure(var Username, Password, Database: PChar); cdecl;
  IDE_GetBrowserInfo: procedure(var ObjectType, ObjectOwner, ObjectName: PChar); cdecl;
  IDE_GetWindowType: function: Integer; cdecl;
  IDE_GetAppHandle: function: Integer; cdecl;
  IDE_GetWindowHandle: function: Integer; cdecl;
  IDE_GetClientHandle: function: Integer; cdecl;
  IDE_GetChildHandle: function: Integer; cdecl;
  IDE_SaveFile: function: Bool; cdecl;
  IDE_Filename: function: PChar; cdecl;
  IDE_ReloadFile: function: Bool; cdecl;

  IDE_GetCustomKeywords: function: PChar; cdecl;
  IDE_SetCustomKeywords: procedure(Keywords: PChar); cdecl;
  IDE_SetKeywords: procedure(ID, Style: Integer; Keywords: PChar); cdecl;
  IDE_ActivateKeywords: procedure; cdecl;

const // Description of this Plug-In (as displayed in Plug-In configuration dialog)
  Desc = 'RTF Export 1.0';

procedure LoadConfig;
procedure SaveConfig;

implementation

{$R *.DFM}

var
  RTF: string;
  ColCount, CurCol: Integer;
  Prepared: Boolean;
  Header: TStringList;

// RTF Related functions

// Start a group with a {
procedure StartGroup(ControlWord: string = '');
begin
  RTF := RTF + '{';
  if ControlWord <> '' then RTF := RTF + '\' + ControlWord;
end;

// End a group with a }
procedure EndGroup;
begin
  if RTF[Length(RTF)] = ' ' then RTF[Length(RTF)] := '}' else RTF := RTF + '}';
  RTF := RTF + #13#10;
end;

// Start a control word with a /
procedure AddControlWord(Title: string; Value: Variant; Group: Boolean = False);
begin
  if Group then StartGroup(Title) else RTF := RTF + '\' + Title;
  if (VarType(Value) = varString) and (Value <> '') then RTF := RTF + ' ';
  RTF := RTF + string(Value);
  if Group then EndGroup;
end;

// Convert special characters
function RTFString(const S: string): string;
var i: Integer;
begin
  Result := '';
  for i := 1 to Length(S) do
  begin
    case S[i] of
      '}' : Result := Result + '\}';
      '{' : Result := Result + '\{';
      '\' : Result := Result + '\\';
      #10 : Result := Result + #10 + '\par ';
    else
      Result := Result + S[i];
    end;
  end;
end;

// Create the RTF header with some general info
procedure RTFStart(Title, Author, Company: string);
var y, m, d, h, s, ms: Word;
begin
  RTF := '';
  StartGroup('rtf');
  StartGroup('info');
  AddControlWord('title', RTFString(Title), True);
  AddControlWord('author', RTFString(Author), True);
  StartGroup('creatim');
  DecodeDate(Now, y, m, d);
  AddControlWord('yr', y);
  AddControlWord('mo', m);
  AddControlWord('dy', d);
  DecodeTime(Now, h, m, s, ms);
  AddControlWord('hr', h);
  AddControlWord('min', m);
  EndGroup;
  AddControlWord('company', RTFString(Company), True);
  EndGroup;
end;

// Some formating for the rows
procedure RTFFormat1;
begin
  AddControlWord('pard \nowidctlpar\widctlpar\intbl\adjustright', '');
  RTF := RTF + #13#10;
end;

// Some formating, used at the end of the file
procedure RTFFormat2;
begin
  AddControlWord('pard \nowidctlpar\widctlpar\adjustright', '');
  RTF := RTF + #13#10;
end;

// Close the RTF
procedure RTFEnd;
begin
  RTFFormat2;
  AddControlWord('par', '', True);
  EndGroup;
end;

// Start a RTF row
procedure RTFStartRow;
var i: Integer;
begin
  AddControlWord('trowd', '');
  RTF := RTF + #13#10;
  for i := 1 to ColCount do AddControlWord('cellx', Integer(Round(9000 * i / ColCount)));
  RTF := RTF + #13#10;
  RTFFormat1;
  StartGroup;
end;

// Add one cell
procedure RTFAddCell(Value: string);
begin
  RTF := RTF + RTFString(Value);
  AddControlWord('cell ', '');
end;

// End the row
procedure RTFEndRow;
begin
  EndGroup;
  AddControlWord('row', '', True);
end;

// Export related functions

// First call after an export request
// You can ask the user for a filename or initialize stuff.
// Return False if you want to cancel the export.
function ExportInit: Boolean; cdecl;
begin
  ColCount := 0;
  CurCol := 0;
  Prepared := False;
  Result := True;
  Header := TStringList.Create;
  LoadConfig;
end;

// Done, everything is exported.
procedure ExportFinished; cdecl;
var L: TStringList;
    SaveDialog: TSaveDialog;
begin
  RTFEnd;
  L := TStringList.Create;
  try
    SaveDialog := TSaveDialog.Create(nil);
    SaveDialog.Title := 'Export data as RTF';
    SaveDialog.Filter := 'RTF files (*.rtf)|*.rtf|All files (*.*)|*.*';
    SaveDialog.DefaultExt := 'rtf';
    SaveDialog.FileName := '';
    SaveDialog.InitialDir := ExportPath;
    if SaveDialog.Execute then
    begin
      L.Text := RTF;
      L.SaveToFile(SaveDialog.Filename);
      ExportPath := ExtractFilePath(SaveDialog.Filename);
      SaveConfig;
    end;
    SaveDialog.Free;
  except
    on E:Exception do ShowMessage(E.Message);
  end;
  L.Free;
  Header.Free;
end;

// One cell of data, this can be the column description or the actual data.
function ExportData(Value: PChar): Boolean; cdecl;
begin
  Result := True;
  if not Prepared then
  begin
    inc(ColCount);
    Header.Add(Value);
  end else begin
    if CurCol = 0 then RTFStartRow;
    RTFAddCell(Value);
    inc(CurCol);
    if CurCol = ColCount then
    begin
      CurCol := 0;
      RTFEndRow;
    end;
  end;
end;

// This function allows you to prepare for the actual data
// All values received with Exportdata before this function is called are column headers,
// and all values received after ExportPrepare is data.
function ExportPrepare: Boolean; cdecl;
var i: Integer;
begin
  Result := True;
  RTFStart('PL/SQL Developer Export', '', 'Allround Automations');
  RTFFormat1;
  // First add the buffered header
  RTFStartRow;
  for i := 0 to ColCount - 1 do RTFAddCell(Header[i]);
  RTFEndRow;
  Prepared := True;
end;

// Plug-In identification, a unique identifier is received and
// the description is returned
function IdentifyPlugIn(ID: Integer): PChar;  cdecl;
begin
  PlugInID := ID;
  Result := Desc;
end;

// Registration of PL/SQL Developer callback functions
procedure RegisterCallback(Index: Integer; Addr: Pointer); cdecl;
begin
  case Index of
     1 : @SYS_Version := Addr;
     2 : @SYS_Registry := Addr;
     3 : @SYS_RootDir := Addr;
     4 : @SYS_OracleHome := Addr;
     5 : @SYS_OCIDLL := Addr;
     6 : @SYS_OCI8Mode := Addr;
    10 : @IDE_MenuState := Addr;
    11 : @IDE_Connected := Addr;
    12 : @IDE_GetConnectionInfo := Addr;
    13 : @IDE_GetBrowserInfo := Addr;
    14 : @IDE_GetWindowType := Addr;
    15 : @IDE_GetAppHandle := Addr;
    16 : @IDE_GetWindowHandle := Addr;
    17 : @IDE_GetClientHandle := Addr;
    18 : @IDE_GetChildHandle := Addr;
    22 : @IDE_SaveFile := Addr;
    23 : @IDE_Filename := Addr;
    28 : @IDE_ReloadFile := Addr;
    60 : @IDE_GetCustomKeywords := Addr;
    61 : @IDE_SetCustomKeywords := Addr;
    62 : @IDE_SetKeywords := Addr;
    63 : @IDE_ActivateKeywords := Addr;
    64 : @IDE_RefreshMenus := Addr;
    65 : @IDE_SetMenuName := Addr;
    66 : @IDE_SetMenuCheck := Addr;
    67 : @IDE_SetMenuVisible := Addr;
    68 : @IDE_GetMenuLayout := Addr;
  end;
end;

// Load configuration from the registry
procedure LoadConfig;
var Reg: TRegistry;
    Key: string;
 function ReadBool(Name: string): Boolean;
 begin
   try
     Result := Reg.ReadBool(Name);
   except
     Result := False;
   end;
 end;
 function ReadString(Name: string): string;
 begin
   try
     Result := Reg.ReadString(Name);
   except
     Result := '';
   end;
 end;
 function ReadInteger(Name: string): Integer;
 begin
   try
     Result := Reg.ReadInteger(Name);
   except
     Result := 0;
   end;
 end;
begin
  Key := SYS_Registry + '\PlugIns\RTF Export';
  Reg := TRegistry.Create;
  Reg.RootKey := HKEY_CURRENT_USER;
  Reg.OpenKey(Key, False);
  try
    ExportPath := Reg.ReadString('Path');
  except
  end;
  Reg.CloseKey;
  Reg.Free;
end;

// Store configuration in the registry
procedure SaveConfig;
var Key: string;
    Reg: TRegistry;
begin
  Key := SYS_Registry + '\PlugIns\RTF Export';
  Reg := TRegistry.Create;
  Reg.RootKey := HKEY_CURRENT_USER;
  Reg.OpenKey(Key, True);
  Reg.WriteString('Path', ExportPath);
  Reg.CloseKey;
  Reg.Free;
end;

// Called when the Plug-In is created
procedure OnCreate; cdecl;
begin
end;

// Called when the Plug-In is destroyed
procedure OnDestroy; cdecl;
begin
end;

// Display the Configuration form
procedure DoConfigForm;
var Form: TConfigForm;
begin
  Form := TConfigForm.Create(Application);
  with Form do
  begin
    if ShowModal = mrOK then SaveConfig else LoadConfig;
    Free;
  end;
end;


// ConfigForm

procedure TConfigForm.FormCreate(Sender: TObject);
begin
//
end;

function RegisterExport: PChar; cdecl;
begin
  Result := 'RTF File';
end;

// All exported functions
exports
  IdentifyPlugIn,
  RegisterCallback,
  OnCreate,
  OnDestroy,
  RegisterExport,
  ExportInit,
  ExportFinished,
  ExportPrepare,
  ExportData;

end.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产不卡视频在线播放| 99久久综合精品| 亚洲三级久久久| 日韩亚洲电影在线| 色综合欧美在线| 国产成人精品综合在线观看| 日韩精品国产欧美| 亚洲天堂精品在线观看| 久久丝袜美腿综合| 制服丝袜av成人在线看| 色综合色狠狠综合色| 国产成人一区二区精品非洲| 久久精品国产第一区二区三区| 亚洲婷婷综合久久一本伊一区| 久久66热偷产精品| 丝袜亚洲另类欧美| 亚洲小说欧美激情另类| 亚洲欧美自拍偷拍| 国产精品美女久久福利网站| 26uuu精品一区二区三区四区在线| 美美哒免费高清在线观看视频一区二区 | 久久综合资源网| 欧美精品第1页| 欧美午夜免费电影| 欧洲中文字幕精品| 日本电影欧美片| 成人黄色一级视频| 成人美女视频在线观看18| 国内精品在线播放| 国内一区二区在线| 精品中文av资源站在线观看| 蓝色福利精品导航| 精品制服美女丁香| 久久成人免费网| 精品一二三四在线| 国产乱码一区二区三区| 国产精品一区二区在线观看不卡 | 亚洲主播在线观看| 亚洲欧洲精品一区二区三区| 国产亚洲欧洲997久久综合| 久久久不卡网国产精品二区 | 91麻豆swag| 成人18精品视频| 91网上在线视频| 欧美午夜影院一区| 777久久久精品| 2021久久国产精品不只是精品| jiyouzz国产精品久久| 国产成人99久久亚洲综合精品| 亚洲精品中文字幕乱码三区| 一区二区三区不卡视频在线观看| 日韩女优av电影| 欧美一级理论性理论a| 日韩欧美国产电影| 国产日本欧美一区二区| 日韩一区有码在线| 亚洲高清免费观看 | 日本伊人午夜精品| 狠狠色综合色综合网络| 国产91在线|亚洲| 色综合久久88色综合天天6| 在线观看国产一区二区| 制服丝袜在线91| 精品国产自在久精品国产| 国产精品丝袜一区| 亚洲精品第1页| 日本成人中文字幕| 成人自拍视频在线| 欧美午夜理伦三级在线观看| 精品国产成人在线影院| 国产精品色呦呦| 亚洲成人免费观看| 国内精品嫩模私拍在线| 91麻豆精东视频| 日韩久久久精品| 亚洲欧洲av在线| 奇米影视在线99精品| 成人av免费网站| 欧美一区二区播放| 国产精品久久久久久久久晋中 | 欧美综合久久久| 精品美女被调教视频大全网站| 欧美日韩精品专区| 欧美国产一区视频在线观看| 亚洲国产视频在线| 国产成人自拍在线| 91精品国产91久久综合桃花| 国产精品电影一区二区| 久久成人免费电影| 色综合网站在线| 久久久精品国产免费观看同学| 日韩欧美一级在线播放| 中文字幕一区三区| 国内精品国产成人| 欧美亚洲一区二区在线观看| 久久久99久久| 日韩国产欧美在线播放| 91网站最新网址| 国产日韩欧美电影| 麻豆精品精品国产自在97香蕉| 裸体歌舞表演一区二区| 在线亚洲高清视频| 中文字幕的久久| 久久国产尿小便嘘嘘| 91极品视觉盛宴| 国产精品久久久久天堂| 肉丝袜脚交视频一区二区| 色综合av在线| 久久精品亚洲精品国产欧美 | 337p亚洲精品色噜噜噜| 亚洲麻豆国产自偷在线| 成人污视频在线观看| 精品国产乱码久久久久久久| 国产一区二区精品久久| 欧美日韩高清影院| 一区二区成人在线视频| 色综合久久久久久久| 日本一区二区三区四区在线视频| 国产欧美一二三区| 国产一区二区三区久久悠悠色av| 国产91精品免费| 欧美电视剧免费全集观看| 日韩影院在线观看| 欧美日韩成人综合| 亚洲黄色免费电影| 在线一区二区三区四区| 亚洲美女屁股眼交3| 91一区二区三区在线观看| 国产精品美女久久久久av爽李琼| 亚洲成人av电影在线| 欧美亚州韩日在线看免费版国语版| 欧美精三区欧美精三区| 亚洲电影第三页| 欧美日韩国产色站一区二区三区| 日韩久久免费av| 国产在线精品国自产拍免费| 久久久国产综合精品女国产盗摄| 中文字幕在线一区| caoporen国产精品视频| 国产精品久久久久久久第一福利| 亚洲不卡av一区二区三区| 欧美日韩综合在线免费观看| 亚洲成人激情综合网| 欧美高清视频一二三区| 日韩电影在线观看网站| 欧美大片拔萝卜| 精久久久久久久久久久| 国产性色一区二区| 99久久综合国产精品| 国产精品久久久久久妇女6080| 免费人成精品欧美精品| 欧美一卡在线观看| 国内精品久久久久影院色 | 日韩欧美国产1| 免费在线视频一区| 国产亚洲精久久久久久| 97精品久久久午夜一区二区三区| 欧美不卡视频一区| 风间由美一区二区av101| 亚洲国产成人自拍| 91久久精品日日躁夜夜躁欧美| 国产网红主播福利一区二区| 成人午夜视频在线| 亚洲成人免费av| 久久久国际精品| 91成人免费电影| 蜜桃av噜噜一区| 国产午夜精品久久久久久免费视| 丝袜亚洲另类丝袜在线| 久久一区二区视频| 色婷婷av一区| 精品一区二区三区免费观看| 亚洲色图制服诱惑| 欧美一区二区三区男人的天堂| 亚洲一本大道在线| 久久蜜臀中文字幕| 欧美专区日韩专区| 精品一区二区三区久久| 亚洲精品视频免费看| 精品久久久久香蕉网| 色婷婷久久综合| 国内精品伊人久久久久av影院| 精品久久免费看| 色哟哟国产精品免费观看| 久久精品国产99国产精品| 中文字幕一区三区| 精品国产乱码久久久久久久久| 美洲天堂一区二卡三卡四卡视频| 欧美日韩精品欧美日韩精品一 | 精品国产一区二区三区不卡 | 日本丶国产丶欧美色综合| 精品一区二区三区在线视频| 亚洲男同性视频| 精品国产91洋老外米糕| 色欧美日韩亚洲| 粉嫩蜜臀av国产精品网站| 秋霞电影网一区二区| 一区二区三区丝袜| 欧美经典一区二区| 欧美精品一区二区三区久久久|