日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

唤醒控件曾经拥有的能力

發布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 唤醒控件曾经拥有的能力 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??


控件的祖先 TControl 有很多功能, 但它的有些子孫確喪失了很多(為了專用).

譬如 TBevel 就沒有把一些常規的事件繼承下來, 那些沒有被繼承的功能一般都隱藏在 protected 區, 如果重新繼承是可以使用的.

這里嘗試了另外一種方法: 自己沒有繼承時, 問一問有繼承的兄弟、叔伯獲取其它親戚; 當然應先確保自己的祖先有該功能且沒被覆蓋過.

通過傳統的繼承法讓 TBevel 相應雙擊事件:

unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, ExtCtrls;typeTForm1 = class(TForm)procedure FormCreate(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}typeTMyBevel = class(TBevel)protectedprocedure DblClick; override;end;procedure TMyBevel.DblClick; begininherited;ShowMessage(ClassName); end;// procedure TForm1.FormCreate(Sender: TObject); beginwith TMyBevel.Create(Self) dobeginLeft := 10;Top := 10;Parent := Self;end; end;end.

先在窗體上添加一個 TBevel, 它沒有雙擊事件, 問一問 TForm 吧:

unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, ExtCtrls;typeTForm1 = class(TForm)Bevel1: TBevel;procedure FormCreate(Sender: TObject);privateprocedure MyDbClick(Sender: TObject);publicend;varForm1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject); beginTForm(Bevel1).OnDblClick := MyDbClick; end;procedure TForm1.MyDbClick(Sender: TObject); beginShowMessage(TComponent(Sender).Name); end;end.

TBevel 通過 TForm 喚醒了對 OnMouseDown、OnMouseMove、OnMouseUp 的記憶, 從而實現被拖動的動能:

unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, ExtCtrls;typeTForm1 = class(TForm)Bevel1: TBevel;procedure FormCreate(Sender: TObject);privateprotectedprocedure MyMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);procedure MyMouseMove(Sender: TObject; Shift: TShiftState; X: Integer; Y: Integer);procedure MyMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X: Integer; Y: Integer);publicend;varForm1: TForm1;implementation{$R *.dfm}vara,b: Integer;f: Boolean;procedure TForm1.FormCreate(Sender: TObject); beginTForm(Bevel1).OnMouseDown := MyMouseDown;TForm(Bevel1).OnMouseMove := MyMouseMove;TForm(Bevel1).OnMouseUp := MyMouseUp; end;procedure TForm1.MyMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); beginf := True;a := X;b := Y; end;procedure TForm1.MyMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); beginif f then with TControl(Sender) dobeginLeft := Left + X - a;Top := Top + Y - b;end; end;procedure TForm1.MyMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); beginf := False; end;end.

轉載于:https://my.oschina.net/hermer/blog/320083

總結

以上是生活随笔為你收集整理的唤醒控件曾经拥有的能力的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。