2012-03-14 33 views
5

Không chắc chắn nếu tittle là đúng nhưng những gì tôi cần làm là để lưu trữ trong một số bộ sưu tập một con trỏ đến chức năng quy định. Tôi đang thực hiện điều đó khá giống như tuyên bố biến sốLưu con trỏ vào hàm được chỉ định trong Delphi

SomeFunctionName: string 

Tất nhiên loại này không thể là chuỗi, câu hỏi là chính xác thì nó là gì?

+0

'loại TGetSomeString = function: string; // đọc trên các loại thủ tục trong tài liệu ' – OnTheFly

+0

Thông thường, đối với các phương thức (thủ tục hoặc hàm thuộc về một lớp), bạn sẽ sử dụng kiểu' procedure (args) của object' hoặc 'function (args): resultype của object' cộng với khai báo kiểu. http://stackoverflow.com/questions/4626614/delphi-please-explain-this-type-procedure-of-object –

Trả lời

6

Bạn thường sử dụng biến con trỏ hàm. Ví dụ:

type 
    TProcedure = procedure; 

procedure MyProc1; 
begin 
end; 

procedure MyProc2; 
begin 
end; 

var 
    Proc: TProcedure; 

..... 
Proc := MyProc1; 
Proc();//calls MyProc1 
Proc := MyProc2; 
Proc();//calls MyProc2 

Đây là ví dụ đơn giản nhất có thể tưởng tượng được. Bạn có thể chỉ định các loại thủ tục có danh sách tham số, phương thức của các kiểu đối tượng và như vậy. Đọc thêm trong chủ đề Procedural Types của hướng dẫn ngôn ngữ.

+1

Lỗi định dạng SO? +1 – TLama

+3

@TLama Vâng, tôi đã từng thấy nó theo thời gian. Tôi đã báo cáo điều đó: http://meta.stackexchange.com/questions/125587/please-can-this-markdown-bug-be-fixed –

+0

@ JacekKwiecień Xem phần có tên "Phương pháp con trỏ" trong trang mà David đề cập đến . –

1

Bạn đang thực sự không lưu trữ thủ tục/chức năng nhưng phương pháp lưu trữ.

Vì vậy, bạn nên sử dụng TMethod Thay thế. TMethod có một con trỏ đối tượng và một con trỏ thủ tục.

Bạn có thể xem chi tiết hơn trong bài khác: Save and restore event handlers

chỉnh sửa: Có vẻ như câu hỏi đã được chỉnh sửa lại gốc sau khi hiển thị một số yêu cầu sự kiện Lưu trữ TControl.onClick .....

Các vấn đề liên quan