2012-07-21 32 views
9

Trong các ngôn ngữ khác như C++, có các toán tử để thực hiện một kiểu hoạt động cộng hoặc bằng hoặc để thêm các kiểu/cờ bổ sung. Có một tương đương trong Delphi?Delphi tương đương với "+ =" để thêm các phần tử vào một bộ là gì?

Ngay bây giờ tôi có một số mã như:

label1.Font.Style := label1.Font.Style + [fsBold]; 
label2.Font.Style := label2.Font.Style + [fsBold]; 

Nhưng tôi rất thích, nếu có thể, để có được điều đó đơn giản hóa một chút để cái gì đó ngắn gọn hơn mà không trùng lặp tên nhãn trên cả hai mặt của sự phân công toán tử, điều gì đó dọc theo các dòng: label1.Font.Style += [fsBold]; hoặc label1.Font.Style := self + [fsBold];

Việc này có thể thực hiện được không? Hay không quá nhiều?

+0

sử dụng chức năng 'inc' - http://docwiki.embarcadero.com/Libraries/en/System.Inc. Dù sao bạn không thể sử dụng nó trên tài sản. – RBA

+4

Đối với các bộ, nó sẽ không là Inc, nó sẽ là [Bao gồm thủ tục] (http://docwiki.embarcadero.com/Libraries/en/System.Include) với cùng một vấn đề mà nó đòi hỏi một biến. – hvd

+0

Đối với chuỗi, sử dụng 'Dấu phẩy (S1, S2, S3, S4 ...)' –

Trả lời

8

Đây là một trong số ít các trường hợp nơi mà tôi có thể đề nghị with tuyên bố:

with label1.Font do Style := Style + [fsBold]; 
with label2.Font do Style := Style + [fsBold]; 

Thông thường, vấn đề với with là nó không rõ ràng một truy cập thành viên là những gì và những gì không, nhưng nếu phạm vi là một tuyên bố duy nhất trong đó một thuộc tính duy nhất được sử dụng, nó đủ rõ ràng.

11

Delphi có chức năng Inc, nhưng nó không hoạt động trên các thuộc tính:

Inc(a);  // Increment a with 1 
Inc(a, 5); // Increment a with 5 

Nếu bạn cần thêm phong cách cho một phông chữ thường, bạn có thể viết một thủ tục:

procedure AddStyle(const AFont: TFont; const AStyle: TFontStyles); 
begin 
    AFont.Style := AFont.Style + AStyle; 
end; 

(Với các phiên bản sau của Delphi bạn có thể sử dụng các trình trợ giúp lớp).

+3

+1, Và tôi chỉ sửa phương thức AddStyle của bạn :), bạn cũng có thể thêm một vùng sử dụng giống như vậy ' AddStyle (Label1.Font, [fsBold]); ' – RRUZ

+0

Cảm ơn bạn đã sửa lỗi ;-). –

0

Subclass TLabel loại và tạo ra một phương pháp như thế này:

procedure TMyLabel.AddStyle(const AStyle: TFontStyles); 
begin 
Self.Font.Style := Self.Font.Style + AStyle; 
end; 

Sau đó, bạn có thể đặt các lớp thành một gói bpl và cài đặt nó vào trình soạn thảo. Sau đó, bạn có thể thay thế tất cả nhãn của mình thành các nhãn tùy chỉnh. Đối với dự án lớn, tôi muốn giới thiệu Notepad ++ để thay thế tất cả các khai báo của bạn trong .pas và (văn bản!) .dfm tệp. Điều này nghe có vẻ phức tạp nhưng nó chưa đầy một giờ làm việc. Chúc may mắn!

+0

không làm điều này, sự phức tạp mà bạn giới thiệu với mã là rất đáng để làm việc thêm.làm điều đó trong một mô hình khách truy cập, (tạo một hàm bên ngoài chấp nhận TLabel và TFontStyles và thực hiện công việc trong một hàm). – none

+0

Đây có lẽ là một trong những lý do tồi tệ nhất có thể để tạo một lớp con. Một hàm tiện ích đơn giản thực hiện công việc khá độc đáo, không can thiệp vào thứ bậc lớp của bạn. –

13

Bao gồm những gì bạn đang tìm kiếm. Thật không may bạn chạy vào vấn đề Label.Font.Style là một tài sản và phải được giao cho và không được thông qua bởi var. Tuy nhiên, bạn có thể thực hiện việc này:

var 
    fontStyle: TFontStyles; 
begin 
    fontStyle := Label1.Font.Style; 
    Include(fontStyle, fsBold); 
    Label1.Font.Style := fontStyle; 
Các vấn đề liên quan