Q&A

  • 소스좀 봐 주세요
아래 소스를 보시고 조언을 부탁드립니다



문제1> MDI 폼에서 Cilent 영역에 그림을 불러왔는데 Child 폼을 불러오면

Access Violation Error 발생합니다. 하지만 그림을 불러오지 않으면

잘 됩니다.



문제2> Form2와 Form3은 Child 폼인데요

Form3에서 버튼을 클릭하면 Form2의 Edit1에 특정값을 넣어 주려고 하는데..

이때도 마찬가지로 Access Violation Error 발생합니다.

델 고수님들의 조언을 부탁드립니다.



첫번째 Unit



unit main_u;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

ExtCtrls, Buttons, Menus, ToolWin, ComCtrls, Grids;



type

TForm1 = class(TForm)

CoolBar1: TCoolBar;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

DM1: TMenuItem;

N3: TMenuItem;

SpeedButton1: TSpeedButton;

StatusBar1: TStatusBar;

procedure SpeedButton1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure FormDestroy(Sender: TObject);

private

FOldDefWndProc : Pointer;

FNewDefWndProc : Pointer;

{ Private declarations }



procedure ClientWndProc(var msg : TMessage);



public

{ Public declarations }

end;



var

Form1: TForm1;



implementation



uses Unit2;



{$R *.DFM}



{ Child Form Create }

Function CreateChild(sClass : string) : Boolean;

var

MyFormClass : TFormClass;

WorkForm : TForm;

// H : Thandle;

begin

Result := True;

MyFormClass := TFormClass(GetClass(sClass)); // 클래스 찾기

if MyFormClass <> nil then

WorkForm := MyFormClass.Create(Application.MainForm)

else Result := False;

end;



procedure TForm1.ClientWndProc(var msg : TMessage);

var

SBar : Boolean;



ClientDC : HDC;

MemDC : TBitMap;

MemDCX : Integer;

MemDCY : Integer;



begin

{ Scroll Bar Control }

SBar := True;

case Msg.msg of

$3F : SBar := False;

end;



if SBar Then with Msg

do Result := CallWindowProc(FOldDefWndProc, ClientHandle, Msg, wParam, lParam);



{ Main Form Image Contril }



case Msg.Msg of

WM_PAINT : begin

ClientDC := GetDC(ClientHandle );

MemDC := TBitmap.Create;

MemDC.LoadFromFile('sh.bmp');

MemDCX := 0;

MemDCY := 0;

repeat

repeat

BitBlt ( ClientDC, MemDCX, MemDCY, MemDC.Width,

MemDC.Height, MemDC.Canvas.Handle, 0, 0, SRCCOPY );

Inc ( MemDCX, MemDC.Width );

until MemDCX >= ClientWidth;

MemDCX := 0;

Inc ( MemDCY, MemDC.Height );

until MemDCY >= ClientHeight;

ReleaseDC ( ClientHandle, ClientDC );

MemDC.Free;

end;

end;

with Msg do

Result := CallWindowProc ( FOldDefWndProc, ClientHandle, Msg, wParam, lParam );



{ Control End }

end;



procedure TForm1.SpeedButton1Click(Sender: TObject);

begin

// Form2 := TForm2.Create(Self);

CreateChild('TForm2');

end;



procedure TForm1.FormCreate(Sender: TObject);

begin

FNewDefWndProc := MakeObjectinstance(ClientWndProc);

FOldDefWndProc := Pointer(SetWindowLong(ClientHandle, GWL_WNDPROC, LongInt(FNewDefWndProc)));

end;



procedure TForm1.FormDestroy(Sender: TObject);

begin

SetWindowLong(ClientHandle, GWL_WNDPROC, LongInt(FOldDefWndProc));

FreeObjectInstance(FNewDefWndProc);

end;



end.





두번째 UNIT

unit Unit2;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Buttons;





type

TForm2 = class(TForm)

Edit1: TEdit;

Button1: TButton;

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure Button1Click(Sender: TObject);



private

{ Private declarations }

public

{ Public declarations }

end;



var

Form2: TForm2;



implementation



uses Unit3;





{$R *.DFM}



procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Action := Cafree;

end;





procedure TForm2.Button1Click(Sender: TObject);

begin

Form3 := TForm3.Create(self);

end;



initialization RegisterClasses([TForm2]);



end.





세번째 UNIT

unit Unit3;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls;



type

TForm3 = class(TForm)

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;



var

Form3: TForm3;



implementation



uses Unit2;



{$R *.DFM}



procedure TForm3.Button1Click(Sender: TObject);

begin

Form2.Edit1.Text := '1111';

end;



end.



끝까지 읽어 주셔서 감사하구요.. 꼭 문제점을 알려주시기 바랍니다.

멜을 주셔도 감사구요

E-Mail : ironfly@popsmail.com

0  COMMENTS
    • 조규춘
      2000.06.15 19:19
      사발우성 wrote: > 잘 돌아 가다가 갑자기 이런 에러가 나옴당.....ㅠ.ㅠ 도대체 요건 무슨 에러 인가엽.....
    • 초보
    • 2000.06.15 19:04
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 심동훈
      2000.06.16 19:24
      타락천사 wrote: > 안녕하세여.. 타락임다...^^ > > 0.5, 1.5, 2.5, 3.5.... > > Round() 에 넣어...
    • 타락천사
      2000.06.16 20:38
      안녕하세여.. 타락임다..^^ 글쿤여... 보통 반올림에선 .5 면 올림을 하져.. Round()형의 반올림을 ...
    • 김해중
      2000.06.16 03:29
      이미지에 목마른 소녀 wrote: > 디비 이미지를 넣어야 하는데 어떻게 해야하는지 몰라 > 심각한 우울중에...
    • young
    • 2000.06.15 18:11
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김해중
      2000.06.16 03:43
      young wrote: > qrdbtext 의 datafield를 클릭할때마다 조건에 맞는 쿼리의 필드 > 를 바꾸고 싶은데여.....
    • 윤정
    • 2000.06.15 17:48
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 조규춘
      2000.06.15 19:01
      윤정 wrote: > 레포트 자료를 구할려구 오늘 첨 들어와 봤는데요... > 음..제가 찾는 자료가 없어서요.. ...
    • 은진
    • 2000.06.15 11:31
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 조규춘
      2000.06.15 14:08
      은진 wrote: > 안녕하세요 저는 델파이를 공부하는 학생인데요 아직 초보라서 잘 몰라요 > 그래서 그러...
    • 이태수
    • 2000.06.15 11:09
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 조규춘
      2000.06.15 14:06
      이태수 wrote: > delphi5.0을 가지고 프로그램을 개발하고 있는 중입니다. > > 근데, delphi를 자알 몰...
    • 김경식
    • 2000.06.15 09:47
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 조규춘
      2000.06.15 14:58
      김경식 wrote: > 1. 클립보드의 내용중에 Bitmap이 있으면 그것을 jpg파일로 저장할려고 합니다. > 그...
    • 김경식
      2000.06.15 19:31
      답변에 진심으로 감사드립니다. 근데, 두번째 질문이 무슨 말인지 모르겠다고 하셨는데, 아마도 제가 설...
    • 조규춘
      2000.06.15 14:00
      비룡득주 wrote: > 안녕하세요..! > 프로그램 셋업을 동시에 두개를 하고 싶은데여!! > InstallShield에...
    • 비룡득주
      2000.06.15 14:32
      안녕하세요!!! 여기는 이미 제가 둘러 본곳이군요! 여기에서 샅샅이 뒤졌는데도 제가 원하는 자료를 찾을...
    • 조규춘
      2000.06.15 14:44
      비룡득주 wrote: > 안녕하세요!!! > 여기는 이미 제가 둘러 본곳이군요! 그 둘러 본곳은 저의 사이트...
    • 비룡득주
      2000.06.16 01:16
      안녕하세요!! 규춘님 답변 감사합니다. > 그 둘러 본곳은 저의 사이트 이고, 그 자료도 제가 올린 것...
    • 최용일
      2000.06.15 09:38
      안녕하세요. 최용일입니다. 아니 누가 255자밖에 안들어간다고 했어요? 아주 옛날 옛적의 이야기를 하시...
    • 민성기
      2000.06.15 09:27
      궁금이... wrote: > 안녕하십니까? > 급할때 마다 이곳에서 도움을 받고 있는 델초보입니다... > 다름이...
    • 강인규
      2000.06.15 12:12
      고수님들이 잠시 간과하신게 있는거 같아 한자 적습니다. 혹시 1.5와 2.5를 반올림 해보셨습니까? 값은...
    • 이일형
    • 2000.06.15 06:47
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 코스
      2000.06.15 12:52
      이일형 wrote: > 아래 에러를 보시고 한수 가르쳐주세요.. > > Directory is controlled by other .NET...
    • mega
    • 2000.06.15 05:30
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 초보...
    • 2000.06.15 05:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이용호
      2000.06.16 00:24
      우선 RUN의 Unregister ...를 실행하세요. 또한 Component/Install Packages.../Packages/Borland User Co...
    • 정주
    • 2000.06.15 04:25
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.06.15 17:43
      안녕하세요. 최용일입니다. 자료실의 GraphicEx v7.1을 사용해보세요. ^^ 항상 즐코하세요. 정주 ...
    • 조유정
    • 2000.06.15 03:39
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 강인규
      2000.06.15 05:55
      혹시 디테일을 한장씩 잡아서 사용하시나요? 그럴 경우 디테일이 페이지 크기에 근접하면 첫장이 안나올 ...