2012-03-07 45 views
5

Dự án tôi làm việc trên bao gồm một số 100 biểu mẫu. Chúng chủ yếu được gọi từ biểu mẫu chính. Tên ứng dụng nằm trong tất cả các formcaptions.Đang cố gắng để bắt được một hình thức

Bây giờ, một "phiên bản" khác của ứng dụng phải thay đổi phụ đề biểu mẫu thành một tên ứng dụng khác. Nhưng điều này là có điều kiện.

Những gì tôi đã đưa ra được ràng buộc

Screen.OnActiveFormChange := ScreenOnActiveFormChange; 

trong formcreate và thực hiện một thủ tục cho điều đó.

procedure TFormMAIN.ScreenOnActiveFormChange(Sender: TObject); 
begin 
    if Newversion then begin 
    if assigned(screen.activeform) then begin 
     Screen.ActiveForm.Caption := SwapFormCaption(Screen.ActiveForm.Caption); 
    end; 
    end; 
end; 

Điều này làm việc tốt trong 95% trường hợp. Nhưng trong 5%, biểu mẫu được hiển thị quá nhanh. Cửa sổ được vẽ trước khi chú thích được cập nhật và các cửa sổ để nó ở đó. Nhưng chú thích đã có một giá trị mới. Biện pháp khắc phục nào đã tăng lên và giảm chiều cao của biểu mẫu xuống 1 pixel và sau đó nó sẽ hiển thị đúng. form.repaint không trợ giúp ở đây. Đây là một cách khá xấu xí khi làm việc.

Điều tôi thực sự muốn là ngăn chặn việc tạo biểu mẫu phụ thay vì kích hoạt. Tôi đã cố tìm tài nguyên về điều đó nhưng không thành công.

+13

Cách tốt nhất để làm điều này là để làm cho tất cả các hình thức của bạn xuất phát từ một cơ sở chung lớp học. Sau đó, bạn có thể kiểm soát các cài đặt chung cho tất cả các biểu mẫu từ một vị trí duy nhất –

+0

Sau khi điều tra thêm, tôi nghĩ rằng đó là lỗi bằng cách nào đó là videobuffer. Khi tôi kéo cửa sổ, chú thích không thay đổi và vẫn sai. Trừ khi tôi kéo nó để trượt khỏi máy tính để bàn. Khi tôi kéo nó trở lại, phần không được hiển thị trên dekstop được thay đổi thành chú thích chính xác trong khi phần vẫn còn nhìn thấy được vẫn sai. –

Trả lời

0

Bạn đã thử sử dụng api cửa sổ chưa?

SetWindowText(Screen.ActiveForm.Handle,PChar(SwapFormCaption(Screen.ActiveForm.Caption)); 

Edit: 1 gợi ý nữa: Thêm một cuộc gọi DrawMenuBar API để buộc vẽ lại của thanh menu sổ

DrawMenuBar(Screen.ActiveForm.Handle); 
+0

Điều này thực hiện chính xác giống như mã tôi đã đăng, với cùng một vấn đề. –

+0

DrawMenuBar hoạt động tốt, cảm ơn. –

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