2012-03-07 3 views
5

제가 진행중인 프로젝트는 여러 가지 양식으로 구성되어 있습니다. 그들은 주로 mainform에서 호출됩니다. 응용 프로그램 이름은 모든 formcaptions에 있습니다.양식을 만들려고 시도합니다.

이제 응용 프로그램의 다른 "버전"에는 캡션이 다른 응용 프로그램 이름으로 변경되어야합니다. 그러나 이것은 조건부입니다. 나는 formcreate에서

Screen.OnActiveFormChange := ScreenOnActiveFormChange; 

을 결합하고하는 절차를 만들고 있었다 해낸

.

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; 

이것은 95 %의 경우에 잘 작동합니다. 그러나 그 5 %에서 양식이 너무 빨리 보입니다. 캡션이 업데이트되고 창이 닫히기 전에 창이 그려집니다. 그러나 캡션에는 이미 새로운 가치가 있습니다. 해결 방법은 1 픽셀 씩 폼 높이를 높이거나 낮추고 올바르게 표시하는 것입니다. form.repaint가 여기 도움이되지 못했습니다. 이것은 일을 오히려 못생긴 방법입니다.

내가 정말로 원하는 것은 정품 인증 대신 하위 양식 생성을 가로채는 것입니다. 그것에 관한 자료를 찾으려고했지만 성공하지 못했습니다.

+13

의이 모든 형태가 공통 기본에서 파생하는 것입니다 할 수있는 가장 좋은 방법을 다시 그리기 강제로 DrawMenuBar의 API 호출을 추가 수업. 그런 다음 모든 양식에 공통된 설정을 단일 위치에서 제어 할 수 있습니다. –

+0

추가 조사 후 어떻게 든 videobuffer 버그라고 생각합니다. 창을 끌면 자막이 바뀌지 않고 잘못 표시됩니다. 드래그하지 않으면 데스크톱에서 빠져 나옵니다. 다시 드래그하면 덱 스톱에 표시되지 않은 부분이 올바른 캡션으로 변경되고 표시되는 부분은 잘못 유지됩니다. –

답변

0

창 API를 사용해 보셨습니까?

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

편집 : 1 개 제안 : 창 메뉴 바

DrawMenuBar(Screen.ActiveForm.Handle); 
+0

동일한 문제로 내가 게시 한 코드와 정확히 동일합니다. –

+0

DrawMenuBar 잘 작동합니다. –

관련 문제