Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr
  • 0

TStyleManager.TrySetStyle 함수 관련 질문 드립니다.


김민호

질문

안녕하세요.

 

델파이에서 기본 제공되는 스타일을 활용하여 프로그램 런타임에 디자인을 변경 하려고 TStyleManager.TrySetStyle 함수를 사용합니다.

원하는 디자인으로의 변경은 문제가 없으나, 변경 후 기존 생성되어 있던 MDI Child Form이 존재는 하나 화면 상에 나타나지 않는 현상이 있습니다.

그 상태로 show 또는 bringToFront 를 사용하면 Child Form 이 표시는 되지만 이 Child Form의 화면 자체가 거의 안보이거나 몇몇 글자만 표시되는 형태로 보입니다. 

관련하여 비슷한 증상을 겪거나, 참고할만한 내용을 알려주시면 감사하겠습니다.

 

 

이 댓글 링크
다른 사이트에 공유하기

3 answers to this question

Recommended Posts

  • 0

소스 전달 드립니다.

 

procedure TMainForm.FormCreate(Sender: TObject);
var
  SubMenu: TMenuItem;
  i : integer;
  defStyle : string;
begin
  defStyle := TStyleManager.ActiveStyle.Name;
  if (TStyleManager.StyleNames <> nil) and (length(TStyleManager.StyleNames) > 0) then begin
    for i := 0 to length(TStyleManager.StyleNames)-1 do
    begin
      SubMenu := TMenuItem.Create(Style);
      Style.Add(SubMenu);
      SubMenu.Caption := TStyleManager.StyleNames[i];
      SubMenu.OnClick := ChangeStyle;
      if defStyle = SubMenu.Caption then
        SubMenu.Checked := true;
    end;
  end;

  if not (defStyle = TStyleManager.ActiveStyle.Name) then
    TStyleManager.TrySetStyle(defStyle, false);
end;

//---------------------------------------------------------------------

procedure TMainForm.ChangeStyle(Sender: TObject);
var
  i : integer;
  tempmi : TMenuItem;
  isModStyle : boolean;
  clickMenuCap : String;
begin
  clickMenuCap := (Sender as TMenuItem).Caption;

  if TStyleManager.ActiveStyle.Name = clickMenuCap then
    Exit;


  isModStyle := TStyleManager.TrySetStyle(clickMenuCap, false);
  if isModStyle then begin
    tempmi := Style;
    for i := 0 to tempmi.Count-1 do
    begin
      tempmi.Items[i].Checked := false;
      if tempmi.Items[i].Caption = clickMenuCap then
        tempmi.Items[i].Checked := true;
    end;
  end;
end;

 

메인 폼의 메뉴를 사용 가능한(Application-Appearance에서 체크한) 스타일이 있을 경우 동적으로 구성되도록  작성하였습니다.

스타일 변경 소스를 잘못 작성하였을까요?

이 댓글 링크
다른 사이트에 공유하기

  • 0

프로그램 소스에서 begin 절 최상단에

Application.Initialize;

Application.MainFormOnTaskbar := True;

를 추가하니 정상 동작합니다...

 

델파이 5버전으로 생성했던 프로젝트라서 해당 구문이 추가가 되어 있지 않았던 것으로 보입니다.

해당 소스가 어떻게 동작하는지는 더 확인해봐야겠지만, 위의 문제는 해결 되었습니다.

 

이 댓글 링크
다른 사이트에 공유하기

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 질문에 답변하기...

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.