제가 델파이는 잘 몰라서..
내용은 TOpenDialog로 나만의 Dialog만들기 입니다.
그런데..구문을 잘 모르겠더라구요..
전 이것을 C로 바꿔서 BCB 콤퍼넌트로 만들어 사용하고 싶습니다.
BCB 함수 DCC32 로 바꿀수도 있지만 잘 안되더라구요..
그리고 제가 원하는 폼으로 버꾸길 원하므로 해석을 해야 되거든여..
//객체선언부///////////////////////////////////////////////////////////////////////////
unit NewFileDialog;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TNewFileDialog = class(TOpenDialog)
private
function IsFilterStored: Boolean;
protected
procedure DoClose; override;
procedure DoSelectionChange; override;
procedure DoShow; override;
published
property Filter stored IsFilterStored;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function Execute: Boolean; override;
end;
procedure Register;
implementation
{$R EXTDLGS.RES} /////////리소스 부분
procedure Register;
begin
RegisterComponents('US Library', [TNewFileDialog]);
end;
end.
//구현부///////////////////////////////////////////////////////////////////////////
procedure TNewFileDialog.DoClose;
begin
inherited DoClose;
{ Hide any hint windows left behind }
Application.HideHint;
end;
function TNewFileDialog.Execute: Boolean;
begin
if NewStyleControls and not (ofOldStyleDialog in Options) then
Template := 'NEWFILEDLG' else
Template := nil;
Result := inherited Execute;
end;
///////////////////////////////////////
위부분을 바꾸면
NewFileDialog.h
class PACKAGE TNewFileDialog : public TOpenDialog
{
private:
bool __fastcall IsFilterStored(void);
protected:
DYNAMIC void __fastcall DoClose(void); //이부분은 어떻게 구현하는지
DYNAMIC void __fastcall DoSelectionChange(void);
DYNAMIC void __fastcall DoShow(void);
virtual void __fastcall WndProc(Messages::TMessage &Message); //이부분은 어떻게 구현하는지
__published:
TOpenDialog *OpenDialog;
__property Filter = {stored=IsFilterStored};
public:
__fastcall virtual TNewFileDialog(TComponent* Owner);
virtual bool __fastcall Execute(void);
};
//NewFileDialog.Cpp 구현부분
__fastcall TNewFileDialog::TNewFileDialog(TComponent* Owner)
: TOpenDialog(Owner)
{
if(!OpenDialog1)
OpenDialog1 = new TOpenDialog(this);
}
namespace Newfiledialog
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TNewFileDialog)};
RegisterComponents("Samples", classes, 0);
}
}
bool __fastcall TNewFileDialog::Execute(void)
{
return TOpenDialog::Execute(); //이렇게 하는지 의심스럽습니다
}
//---------------------------------------------------------------------------
void __fastcall TNewFileDialog::DoClose(void)
{
TOpenDialog::DoClose();
if(OpenDialog1)
delete OpenDialog1;
}
이렇게 바꾸고 난뒤 콤퍼넌트 등록 했습니다
그리고 새로 만든 컴포넌트로 Execute 를 호출하니 호출되지 않더군여..
(호출하기 위해 버튼을 만들어 누르면 호출되게 했는데,,, 버튼 모양도 뜨지 않더군여..
그래서 생성자에 강제로 호출시켰는데.. 그부분은 무시하더구여..우째 이런일이..)
제가 어디를 잘못 했는지 잘 모르겠습니다.
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Form1->NewFileDialog1->Execute();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form1->NewFileDialog1->Execute();
}
위부분이 불러와서 버튼 클릭하면 호출하게 하는 구분입니다.
그리고 델파이의 EXTDLGS.RES 의 리소스를 BCB의 어디다가 어떻게 첨가해야되는지?..
보통 Project.cpp 에 USERES("Project1.res")
이렇게 사용하는걸로 아는데..이부분은 콤퍼넌트에 붙이는 리소스라 어떻게
해야 되는지 잘 모르겠습니다.
DYNAMIC void __fastcall DoShow(void); //이부분은 어떻게 구현하는지
virtual void __fastcall WndProc(Messages::TMessage &Message); //이부분은 어떻게 구현하는지
사이트 알려준거 까지 고마운데..
너무 많은걸 원하는거 같습니다...지송합니다..
혹시 아시는 분이나 위부분에서 아시는 부분이라도 있으신분 답변 부탁드립니다..
|