-新增 FileDrop 屬性到 視覺化控制元件(visual control) 中- (轉)
作者:Damir Kojevod
新增FileDrop屬性到視覺化[visual control] 中
1.首先從視覺化控制元件(visual control )中繼承一個新的控制元件。
2.增加接受拖拽訊息的屬性。
3.增加訊息被處觸發時要響應處理的事件。
4.使用測試這個新建立的控制元件。
詳細說明:
1。在中 Component|Newcomponent 選擇一個祖先。這裡使用TEdit,給這個控制元件取名 TFileDropEdit,可設定其他引數,並選擇確定或(這種情況表示自動安裝控制元件到 控制元件模板)。
2。增加接收檔案拖拽的屬性。
在private部分 增加一個訊息過程,宣告如下:
procedure WMDROPFILES(var Message: TWMDROPFILES); message WM_DROPFILES;
這個訊息過程完成從 接收WM_DROPFILES訊息並且能進行'初加工'。這個過程完成一系列通常的處理,接收者從訊息中提取訊息引數等。同時我們還允許定義她自己的動作(把提取的資訊交給使用者處理),所以我們必須定義一個事件指標來完成這個功能。如果使用者定義了處理過程,訊息處理過程會使用者定義的過程。另外,控制元件必須向windows宣告自己是能接收檔案拖拽的控制元件。是否註冊要呼叫windows DragAcceptFiles.引數中需要控制元件的控制程式碼,所以不能在控制元件的構造器中完成註冊,這裡在public部分增加屬性。這裡用AcceptFiles屬性來註冊和登出檔案拖拽功能。
3。定義訊息觸發事件(提供事件指標)以便使用者定義處理過程事件。
先定義一個過程事件:引數為TStringList。如下:
TFileDropEvent = procedure(File: TStringList) of ;
再在published 部分定義屬性 如下
property OnFileDrop: TFileDropEvent Read FFileDrop write FFileDrop;
同時在private部分定義過程指標變數:
FFileDrop: TFileDropEvent;
下面的是 TDropEdit控制的全部程式碼。注意:開始控制元件是不接受檔案拖拽的,如果使用者設定AcceptFile 屬性為真則可接受檔案拖拽。
unit FileDropEdit;
interface
uses
Windows,
Messages,
SysUtils,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
StdCtrls,
;
type
TFileDropEvent = procedure(files: tstringlist) of object;
TFileDropEdit = class(TEdit)
private
{ Private declarations }
FFileDrop: TFileDropEvent;
FAcceptFiles: Boolean;
procedure WMDROPFILES(var Message: TWMDROPFILES); message WM_DROPFILES;
procedure SetAcceptFiles(const Value: Boolean);
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); overr;
property AcceptFiles: Boolean read FAcceptFiles write SetAcceptFiles;
published
{ Published declarations }
property OnFileDrop: TFileDropEvent read FFileDrop write FFileDrop;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [TFileDropEdit]);
end;
constructor TFileDropEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner: TComponent);
FFileDrop := nil;
FAcceptFiles := False;
end;
procedure TFileDropEdit.WMDROPFILES(var Message: TWMDROPFILES);
var
NumFiles: integer;
buffer: array[0..255] of char;
i: integer;
l: TStringList;
begin
if Assigned(FFiledrop) then
begin
l := TStringList.Create;
NumFiles := DragQueryFile(Message.Drop, $FFFFFFFF, nil, 0); {thanks to Mike Heydon for D5 adjustment of parameters}
for i := 0 to NumFiles - 1 do {Accept the dropped file}
begin
DragQueryFile(Message.Drop, i, buffer, sizeof(buffer));
l.append(StrPas(buffer))
end;
FFileDrop(l);
l.free
end
end;
procedure TFileDropEdit.SetAcceptFiles(const Value: Boolean);
begin
if FAcceptFiles <> Value then
begin
FAcceptFiles := Value;
DragAcceptFiles(Handle, Value);
end
end;
end.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988462/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 教你在WindowsXP中為USB新增“只讀”屬性(轉)Windows
- 【譯】使 Visual Studio 更加視覺化視覺化
- rcp新增屬性
- 為 protocol 中屬性新增預設值Protocol
- 利用Powershell為使用者新增“登入到”屬性
- 視覺化中的資料視覺化
- SWT的視覺化控制元件的X11視窗控制程式碼簡介(轉)視覺化控制元件
- 為textarea新增maxlength屬性
- 【張逸】ASP.Net中控制元件的EnableViewState屬性ASP.NET控制元件View
- ANDROID 控制元件常用屬性Android控制元件
- 初識 D3.js :打造專屬視覺化JS視覺化
- Vue 不能檢測到物件屬性的新增或刪除,注意!!!Vue物件
- 視覺化視覺化
- 如何使用純前端控制元件集 WijmoJS 中的視覺化線上設計器前端控制元件JS視覺化
- WPF中的XAML是如何轉換成視覺化樹的?視覺化
- class屬性的新增刪除
- Runtime之分類新增屬性
- css3新增屬性APICSSS3API
- Visual Studio 檔案 BuildAction 屬性值UILDA
- C# toolstrip 上新增DateTimePicker Control控制元件C#控制元件
- EasyUI 中 DataGrid 控制元件 列 如何繫結物件中的屬性UI控制元件物件
- ADO2.1中Bookmark 屬性 (轉)
- navicat資料庫全域性關係視覺化資料庫視覺化
- vue 監視屬性Vue
- Android控制元件的fitSystemWindows屬性Android控制元件Windows
- 百度釋出深度學習視覺化平臺 Visual DL深度學習視覺化
- (在模仿中精進資料視覺化09)近期基金漲幅排行視覺化視覺化
- 3D視覺化|疫情態勢視覺化3D視覺化
- ubuntu下OpenLDAP新增自定義屬性UbuntuLDA
- css3新增哪些背景屬性CSSS3
- js給html標籤新增屬性JSHTML
- Android自定義View 屬性新增AndroidView
- 給自定義View新增xml屬性ViewXML
- 【Swift】在extension裡面新增屬性Swift
- Geopandas——從“視覺化”到“字母化”的空間資料分析視覺化
- C# 自定義屬性在propertyGrid控制元件中顯示C#控制元件
- 視覺化portainer視覺化AI
- (在模仿中精進資料視覺化03)OD資料的特殊視覺化方式視覺化