역시 관리자님이십니다.
정말 도움이 확 되는 답변이십니다.
별 꽁수를 다써봤지만
서브클래씽 흉내도 내보고 했지만 잘 안풀리던데
역시 전 프로그램에 관련된 직종을 그만~
계속해야 될것 같습니다.
하면 할 수 록 재미 있거든요.
물론 고용주에겐 미안하지만.. ( 돈주고 프로그램 제대로 못짜고 .. )
감사하구요...
정말 이럴땐 술이라도 한잔 사드리고 싶다니까요 ^^
그럼 수고하세요...
먼저 델파이 bin 디렉토리에 있는 Convert 파일로 해당 폼 파일을 텍스트로 변환합니다.
텍스트로 변환한 폼 소스(dfm)를 열어서 필요한 부분에서 TBitBtn -> TSpeedButton 으로 변경한 후에 저장합니다.
변환한 폼의 pas 소스를 읽어들이면, 변환된 컴포넌트간에 맞지 않는 속성때문에 오류를 표시할 수 있지만, 모두 무시를 합니다.
그리고, 다시 저장하면, 컴포넌트의 클래스가 일치하지 않으므로 dfm 소스의 클래스로 변경하겠는지 묻습니다. 이때 예를 클릭하시면 pas 부분까지 변환되어 저장되게 됩니다.
물론, 제대로 호환이 안되서 위와 같은 방법으로 변경이 불가능한 경우가 있을 수 있으므로 소스는 반드시 백업해 놓으시고 작업하세요.
너무 무책임한 답변이었나요?
저는 유사한 Edit 간, 유사한 Button 간의 변환을 적용할 때, 위와 같은 방법을 써서 매우 편리하게 작업한 기억이 있어서...
아래와 같이 해보세요... 첨부터 포커스가 있는건 어쩔수가 없네요...
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
BitBtn1: TBitBtn;
......
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
mPrevFocusedControl: TWinControl;
procedure CMFocusChanged(var Message: TCMFocusChanged); message CM_FOCUSCHANGED;
......
end;
implementation
procedure TForm1.CMFocusChanged(var Message: TCMFocusChanged);
begin
if Message.Sender = Button1 then
begin
Message.Sender := mPrevFocusedControl;
Message.Result := 0;
end;
mPrevFocusedControl := Message.Sender;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if mPrevFocusedControl <> nil then
mPrevFocusedControl.SetFocus;
// Does Something...
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
mPrevFocusedControl := ActiveControl;
end;