델파이 6을 쓰고 있습니다.
긴내용 읽으시기 힘드실것 같아 문제점부터 말씀드리겠습니다.
1)Child폼 DLL을 정적으로 호출해야 해서 메모리를 많이 잡아 먹는다는 점.
2)Child폼 DLL을 Showmodal로 할 수 없다는 점.
3)Child폼 Control에서 방향키를 누르면 메인으로 이동한다는 점.
이거 콤보박스에서 조차 그렇구요. 그리드에서 조차 그렇습니다.
4)보통 메인 프로그램 작성하실때 모두 EXE에 포함하는 방식으로 하시나요?
아니면 DLL로 Child폼을 작성하시나요?
여러분은 어떻게 작성하시는지요. 샘플이라도 있으시면 부탁좀 드리겠습니다.
이거 책보고 했습니다. 하다보니 처음엔 되는듯 했는데
자꾸만 문제가 나옵니다.
힘드실줄 압니다만 이 부분만 2주째 해메고 있습니다.
개별화면 하나 하나 개발은 어떻게 하겠는데 메인에서 부터 이러니
골치아파 죽겠습니다.
시간이 허락되시면 조언좀 부탁드리겠습니다.
마음 같아서는 샘플이라도 부탁드리고 싶습니다만 바쁘실테고
죄송하기에 그러지는 못합니다. ㅎㅎ.
여기 인터넷 상황도 전화선에 모뎀이고 친구도 없다보니 어렵기 짝이 없습니다.
부탁 좀 정중히 드리겠습니다.
요지는 이렇습니다.
메인폼에서 Child로 DLL을 부릅니다.
각각 FormStyle을 Normal로 하면 각각의 다른 Application으로 형성되기에
메인폼의 FormStyle : fsMDIForm,
Child DLL의 FromStyle : fsMDIChild
메인폼 소스
정적 DLL 호출을 하였습니다. 문제는 많은 화면에 정적 호출을 하면 메모리를 많이 잡을것 같아서 동적으로 해야 하는데 에러가 나서 이렇게라도 해보았습니다.
{$R *.dfm}
function CreateChild1000(ExeApplication: TApplication; ExeScreen: TScreen):HWND; external 'C:\SamProject\Sales\CustomerX1000.dll' name 'CreateChild';
메뉴 클릭시 호출부분
procedure TfrmMain1.N1001Click(Sender: TObject);
var
SubForm : HWND;
begin
//FindWindow가 잘 안되서 Child 생성 함수에서 Handle값을 아예 받아왔습니다.
SubForm := CreateChild1001(Application, Screen);
SendInfo(SubForm); //WM_COPYDATA 메세지를 던지는 부분입니다.
end;
이제 Child폼 DLL 생성 함수입니다.
function CreateChild(ExeApplication : TApplication; ExeScreen: TScreen) : HWND;
begin
Application := ExeApplication;
Screen := ExeScreen;
if fCustomerX1000 = nil then fCustomerX1000 := TfCustomerX1000.Create(Application);
fCustomerX1000.Width := 850;
fCustomerX1000.Height := 600;
fCustomerX1000.Show;
Result := fCustomerX1000.Handle;
end;
exports
CreateChild;
Child폼 DLL을 메인에 SCREEN에 넣기위한 Unit입니다.
unit Init1000;
interface
uses
Forms;
var
DllApplication : TApplication;
DllScreen : TScreen;
implementation
initialization
DllApplication := DllApplication;
DllScreen := Screen;
finalization
Application := DllApplication;
Screen := DllScreen;
end.