2009-12-31 35 views
6

Như bạn có thể thấy trong lịch sử câu hỏi của mình, tôi đang phát triển một người quản lý sách điện tử, sẽ là nguồn mở và tôi sẽ phát hành nó trong khoảng 10 ngày, nhưng tôi có một số TRadioGroup, như bạn có thể thấy:
TRadioGroup Used On My Form http://img85.imageshack.us/img85/1830/radiogroup.pngNút radio nào được chọn trong TRadioGroup?

Và tôi muốn lưu trữ một số thứ trong một biến (cần phải là Integer) sẽ được "liên kết" với số TRadioGroup này.

tôi cần phải làm một hàm if như thế này:

caption của TRadioButton -> Số đó sẽ cần phải được lưu trữ trong biến

Fit 2xWidth - Mặc định -> 0
Fit 2xHeight -> 1
Fit Width -> 2
Chiều cao Fit -> 3

Nhưng tôi chỉ sử dụng TRadioGroupTRadioButton một lần, khác với trong C# mà tôi đã sử dụng hơn 20 lần. Sau đó, tôi muốn biết những gì tôi cần phải đặt trên nếu chức năng, bởi vì những gì nó sẽ làm tôi đã biết làm thế nào để làm:

var 
    num: Integer; 

begin 
    if(TRadioButton1 checked?) 
    begin 
    num := 0; 
    end; 
end. 

Những gì tôi cần phải đặt bên trong dấu ngoặc của if chức năng?

PS: Tôi sẽ đưa các khoản tín dụng vào chương trình cho những người đã giúp tôi trong dự án nhỏ này.

+0

Từ lịch sử câu hỏi của bạn, tôi nghĩ bạn đã viết tiền tuyến cho GCC. Tại sao một trình quản lý sách điện tử cần gọi trình biên dịch C? –

+0

Đó là một tính năng mới của trình quản lý sách điện tử của tôi. –

Trả lời

9

Một TRadioButton có thuộc tính Đã kiểm tra. Nhưng một TRadioGroup có thuộc tính ItemIndex.

Các mục trong nhóm TRadioGroup được lưu trữ bằng TStrings. Vì vậy, bạn có thể kết hợp một đối tượng cho mỗi tùy chọn và bạn có thể đúc một số nguyên vào một TObject được lưu trữ.

Ví dụ:

// fill the radiogroup 
radiogroup.Items.AddObject('Fit 2xWidth', TObject(0)); 
radiogroup.Items.AddObject('Fit 2xHeight', TObject(1)); 
radiogroup.Items.AddObject('Fit Width', TObject(2)); 
radiogroup.Items.AddObject('Fit Height', TObject(3)); 
radiogroup.ItemIndex := 0; 

Để đọc các thiết lập hiện tại:

value := radiogroup.ItemIndex; 

Hoặc để có được những số nguyên liên quan:

index := radiogroup.ItemIndex; 
Assert(index>=0); // Sanity check 
value := Integer(radiogroup.Items.Objects[index]); 

Trong trường hợp của bạn, các giá trị là 0-3 vì vậy bạn có thể sử dụng ItemIndex.

Lưu ý, nếu không phải là chức năng. Hàm là một đoạn mã trả về một giá trị dựa trên các tham số đầu vào. Nếu là một câu lệnh, đó là một lệnh có thể được thực thi. Câu lệnh if là đặc biệt vì nó cho phép bạn thực hiện một câu lệnh khác dựa trên điều kiện if.

+0

Ok, nhưng làm thế nào tôi có thể sử dụng đoạn mã này để lưu trữ chúng trên một 'Số nguyên', nó sẽ chỉ giữ một số, đó sẽ là một trong số duy nhất được chọn? –

+1

Nếu chiều rộng phù hợp được chọn, ItemIndex = 2, nếu Fix 2xWidth được chọn ItemIndex = 0 vv .. –

+0

Cảm ơn rất nhiều! –

5

Chỉ cần một chút M :O: Đặt .ItemIndex không gửi tiêu điểm bàn phím đến mục radio, tôi biết cách khắc phục, đọc trước.

Thay vì chọn bằng mã, Radio trong RadioGroup bằng cách đặt .ItemIndex, tốt hơn hết là thực hiện điều đó bằng cách gửi tiêu điểm đến mục radio; chỉ để được rất rõ ràng: tôi có nghĩa là gửi tập trung chỉ vào mục radio, không phải toàn bộ nhóm radio.

Thay vì: radiogroup.itemindex:=TheIndex;

Làm điều đó như thế này: TRadioButton(radiogroup.Controls[TheIndex]).SetFocus;

Nó sẽ làm cho mục radio để được lựa chọn và gửi tập trung bàn phím để nó, vì vậy nó sẽ hiển thị các hình chữ nhật chấm arroud nó , giống như người dùng đã nhấp vào nó.

Lưu ý1: Để xem nó trong hành động sử dụng các phím con trỏ trên bàn phím và so sánh hành vi chỉ cần thiết lập .ItemIndex và gửi tiêu điểm đến mục radio.

Lưu ý2: Nếu bạn sử dụng TRadioButton(radiogroup.Controls[TheIndex]).SetFocus; thì không cần thiết phải đặt .ItemIndex chút nào, nó cũng sẽ được thực hiện.

Hy vọng rằng sẽ giúp ai đó có cùng vấn đề với tôi, ví dụ để tránh mã, ví dụ để làm cho nó ở lại mục radio cuối cùng khi mục radio cuối cùng được chọn và bàn phím con trỏ phải được nhấn, tương tự cho đầu tiên.

+1

Quan sát tuyệt vời! – TomR

+0

Nifty bit logic này giải quyết được một vấn đề wacky chúng tôi đã có với một hình thức bị mắc kẹt trong một vòng lặp dựa trên sự kiện OnClick. Cảm ơn! –

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