Q&A

  • 유닛사용시 문제점.....
안녕하십니까?



처음으로질문을하는 초보델피언입니다..



작업을하다가 안되는(?)부분이 있어서 질문을 올립니다..

다름이아니오라

폼1에있는 콤포넌트들을 초기화 또는 값을 무브시키는 유닛을 따로만들어서 실행시킬때



폼1이 만들어질때 유닛에 있는 프로시져를 호출하면 에러가나는군요..



폼1이 만들어지고난후에 유닛에있는 프로시져를호출하면 에러는 안뜨고 잘되는데..

문제는 폼이만들어지면서 값을 무브해야하는상황인데... 흑흑흑..



그냥 폼1에 프로시져를 만들어서 호출해야 하나요?



unit1

...

var

form1:tform1;

...

procedure create_form;

edit1.text:='';

...

end.



이런식으로 되어 있던것을 위의 클리어 부분만 따로 떼어내어서

unit2

...

procedure clear_edit;

form1.edit1.text:='';

...

end.

이렇게 하고 unit1 에서 clear_edit을 폼크리에이트 이벤트프러시져에서 호출하니

access violation error...



도와주세요~~~



2  COMMENTS
  • Profile
    김정 2000.10.11 22:01
    안녕하세요?

    고드름 김정입니다.



    제가 테스트하니 잘 되던데여??



    >> Unit1 파일 소스



    unit Unit1;



    interface



    uses

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

    StdCtrls;



    type

    TForm1 = class(TForm)

    Edit1: TEdit;

    procedure FormCreate(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation



    uses Unit2;



    {$R *.DFM}



    procedure TForm1.FormCreate(Sender: TObject);

    begin

    CreateInit;

    end;



    end.



    >> Unit2 소스



    unit Unit2;



    interface



    uses unit1;



    procedure createInit();



    implementation



    procedure createInit();

    begin

    Form1.edit1.Text := '';

    end;



    end.



    Form1에는 달랑 Edit 하나 생성한 상태입니다.



    참고하세요.

    그럼.



    이주영 wrote:

    > 안녕하십니까?

    >

    > 처음으로질문을하는 초보델피언입니다..

    >

    > 작업을하다가 안되는(?)부분이 있어서 질문을 올립니다..

    > 다름이아니오라

    > 폼1에있는 콤포넌트들을 초기화 또는 값을 무브시키는 유닛을 따로만들어서 실행시킬때

    >

    > 폼1이 만들어질때 유닛에 있는 프로시져를 호출하면 에러가나는군요..

    >

    > 폼1이 만들어지고난후에 유닛에있는 프로시져를호출하면 에러는 안뜨고 잘되는데..

    > 문제는 폼이만들어지면서 값을 무브해야하는상황인데... 흑흑흑..

    >

    > 그냥 폼1에 프로시져를 만들어서 호출해야 하나요?

    >

    > unit1

    > ...

    > var

    > form1:tform1;

    > ...

    > procedure create_form;

    > edit1.text:='';

    > ...

    > end.

    >

    > 이런식으로 되어 있던것을 위의 클리어 부분만 따로 떼어내어서

    > unit2

    > ...

    > procedure clear_edit;

    > form1.edit1.text:='';

    > ...

    > end.

    > 이렇게 하고 unit1 에서 clear_edit을 폼크리에이트 이벤트프러시져에서 호출하니

    > access violation error...

    >

    > 도와주세요~~~

    >

  • Profile
    이주영 2000.10.11 23:15
    제 소스랑 틀린점은 없는듯한데... 전 왜 안될까요?



    참고로 제소스중 문제의부분을 올려드릴께요..



    unit donga_insa;



    interface



    uses

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

    StdCtrls, ComCtrls, Grids, ExtCtrls, Mask, Buttons, DBGrids, Db, DBTables,

    DBCtrls, numedit, unicode, display_error;



    type

    TForm1 = class(TForm)

    PageControl1: TPageControl;

    TabSheet1: TTabSheet;

    TabSheet2: TTabSheet;

    TabSheet3: TTabSheet;

    TabSheet4: TTabSheet;

    Com_sex: TComboBox;

    Com_Chul_sin: TComboBox;

    ED_tel: TEdit;

    ED_jumin: TMaskEdit;

    GroupBox1: TGroupBox;

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    Label4: TLabel;

    .

    .

    .



    procedure FormCreate(Sender: TObject);

    .

    .

    .



    private

    My_pos : Integer;

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;

    pagechk : byte;

    jig_wi_arr, buseo_arr: array of shortstring;





    implementation

    uses

    donga_clear, donga_update, donga_move;



    {$R *.DFM}





    //폼 만들면서 초기값 설정

    procedure TForm1.FormCreate(Sender: TObject);

    var

    i, a: Integer;

    begin

    strGrid1.cells[0,0] := '사 번'; //스트링 그리드(공통)에 타이틀 만들기.

    .

    .

    .



    //분류별 콤보박스에 값집어넣기

    with Query2 do begin

    close;

    SQL.clear;

    SQl.add('select * from pis01f order by pis01_code1, pis01_code2');

    open;

    first;

    end;



    while not(Query2.eof) do

    begin

    a:=strToInt((Query2.fieldByName('pis01_code1').asstring));

    case a of

    1:Com_reli.Items.add(Query2.FieldByName('Pis01_Desc').asString);

    2:Com_blood.Items.add(Query2.FieldByName('Pis01_Desc').asString);

    .

    .

    .

    40:com_04_gwan.Items.add(Query2.FieldByName('pis01_desc').asString);

    end;

    query2.next;

    end;

    Form_clear(0);

    strgrid_ref(0, 0);

    move_edit(1); ===> 이부분에서 donga_move Unit에 있는 프로시져를 호출.

    이걸 폼 만들어진후 사용하면 이상이 없음...

    Com_buser_cho.ItemIndex := 0;

    end;



    end.





    <<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    unit donga_move;



    interface

    uses

    Dialogs, dbtables, display_error, Sysutils, unicode, donga_insa, donga_clear;



    procedure move_Edit(row_strGrid : integer);



    implementation



    procedure move_Edit(row_strGrid : integer);

    var

    i : integer ;

    begin

    with Form1 do begin

    with Query1 do begin

    close;

    SQL.clear;

    SQl.add('select * from pis03f where pis03_sabeon = :pis03_sabeon');

    parambyname('pis03_sabeon').asstring :=strGrid1.cells[0,row_strGrid];

    open;

    ED_sabeon.Text:= Fieldbyname('pis03_sabeon').asString;

    ED_name.Text:= Fieldbyname('pis03_name').asString;

    .

    .

    .

    end;

    end;

    end.