Q&A

  • 공용유닛을 만드는 방법좀 알려주세요...
델파이를 시작한지 한달정도 된 초보가 올립니다.

저는 숫자(돈)을 많이 다루다 보니까 어떤 곳에서 숫자를 한글금액으로 바꿔주는 함수를 다운받았는데 아주 잘 작동하더군요..



그런데 이함수를 다른 프로젝트에서도 필요할 것 같아서 공용유닛으로 만들어서 uses절에다가 포함만 시키고 자유로이 호출하여 사용하고자 하는데



책을 보고 기본적인 폼 없는 유닛을 만들어 사용해 보니 에러가 나더군요...

(자세한 것은 아래에..)

이 유닛에 포함된 함수안에는 StrToInt()라는 함수가 있는데 이 부분에서 에러가 납니다. 에러난 함수 가 어느 모듈에 포함되어 있는가 알아보았더니 SysUtils에 있는것 같아서 이유닛의 Interface절 아래에 uses절을 만들어서 포함시켜도 같은 에러가 나고 uses절 자체도 인식을 하지 못합니다...



제발 절 좀 도와 주실분 계세요.???



혹시 다른 프로젝트 옵션을 셋팅해 줘야 하는지...

아니면 공용유닛에 다른 무언가를 집어넣어야 하는지....

---------------------------------------

호출하는 유닛

unit ddd;

interface

uses

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

URLabels, StdCtrls, kongyoung;

type

TForm1 = class(TForm)

Edit1: TEdit;

wLabel1: TwLabel;

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

if Key = #13 then begin

wLabel1.Caption := Digit_to_Kum(Edit1.Text);

Edit1.SelectAll;

end;

end;

end.



호출받는 공용유닛

(이 유닛에 각종 함수나 프로시져를 선언,정의 할려고 합니다.)

unit kongyoung;

interface

function Digit_to_kum(str : string): string;

implementation

function Digit_to_kum(str : string): string;

var

aStr : array[1..11] of String;

Input_Str : String;

sMony : String;

aMony : array[1..09] of String;

i : integer;

begin

Input_Str := str;

sMony := '';

aMony[1] := '일';

aMony[2] := '이';

aMony[3] := '삼';

aMony[4] := '사';

aMony[5] := '오';

aMony[6] := '육';

aMony[7] := '칠';

aMony[8] := '팔';

aMony[9] := '구';



for i := 10 downto 1 do begin

aStr[i] := copy( Input_Str, Length(Input_Str), 1 );

if aStr[i] = '' then aStr[i] := '0';

Input_Str := copy(Input_Str,1,Length(Input_Str)-1);

end;



for i := 1 to 10 do begin

if aStr[i] = '0' then Continue;

sMony := sMony + aMony[StrToInt(aStr[i])];



if i = 1 then sMony := sMony + '조'

else if i = 2 then sMony := sMony + '억'

else if (i = 3) and (aStr[i+1] = '0')

then sMony := sMony + '천만'

else if i = 3 then sMony := sMony + '천'

else if (i = 4) and (aStr[i+1]='0')

then sMony := sMony + '백만'

else if i = 4 then sMony := sMony + '백'

else if (i = 5) and (aStr[i+1] = '0')

then sMony := sMony + '십만'

else if i = 5 then sMony := sMony + '십'

else if i = 6 then sMony := sMony + '만'

else if i = 7 then sMony := sMony + '천'

else if i = 8 then sMony := sMony + '백'

else if i = 9 then sMony := sMony + '십';

end;

if sMony = '' then sMony := '영';

Result := '₩' + sMony + '원정';

end;

end.



2  COMMENTS
  • Profile
    김일영 2000.04.21 11:12
    안된다고 하셨지만... 전 uses절을 넣은 것만으로 잘 되는군요...

    unit kongyoung;



    interface

    uses Sysutils; // <= 요 부분이죠...



    function Digit_to_kum(str : string): string;



    implementation

    function Digit_to_kum(str : string): string;

    var

    aStr : array[1..11] of String;

    Input_Str : String;

    sMony : String;

    aMony : array[1..09] of String;

    i : integer;

    begin

    Input_Str := str;

    sMony := '';

    aMony[1] := '일';

    aMony[2] := '이';

    aMony[3] := '삼';

    aMony[4] := '사';

    aMony[5] := '오';

    aMony[6] := '육';

    aMony[7] := '칠';

    aMony[8] := '팔';

    aMony[9] := '구';



    for i := 10 downto 1 do begin

    aStr[i] := copy( Input_Str, Length(Input_Str), 1 );

    if aStr[i] = '' then aStr[i] := '0';

    Input_Str := copy(Input_Str,1,Length(Input_Str)-1);

    end;



    for i := 1 to 10 do begin

    if aStr[i] = '0' then Continue;

    sMony := sMony + aMony[StrToInt(aStr[i])];



    if i = 1 then sMony := sMony + '조'

    else if i = 2 then sMony := sMony + '억'

    else if (i = 3) and (aStr[i+1] = '0')

    then sMony := sMony + '천만'

    else if i = 3 then sMony := sMony + '천'

    else if (i = 4) and (aStr[i+1]='0')

    then sMony := sMony + '백만'

    else if i = 4 then sMony := sMony + '백'

    else if (i = 5) and (aStr[i+1] = '0')

    then sMony := sMony + '십만'

    else if i = 5 then sMony := sMony + '십'

    else if i = 6 then sMony := sMony + '만'

    else if i = 7 then sMony := sMony + '천'

    else if i = 8 then sMony := sMony + '백'

    else if i = 9 then sMony := sMony + '십';

    end;

    if sMony = '' then sMony := '영';

    Result := '₩' + sMony + '원정';

    end;

    end.

    잘 되는데요...



    홍영인 wrote:

    > 델파이를 시작한지 한달정도 된 초보가 올립니다.

    > 저는 숫자(돈)을 많이 다루다 보니까 어떤 곳에서 숫자를 한글금액으로 바꿔주는 함수를 다운받았는데 아주 잘 작동하더군요..

    >

    > 그런데 이함수를 다른 프로젝트에서도 필요할 것 같아서 공용유닛으로 만들어서 uses절에다가 포함만 시키고 자유로이 호출하여 사용하고자 하는데

    >

    > 책을 보고 기본적인 폼 없는 유닛을 만들어 사용해 보니 에러가 나더군요...

    > (자세한 것은 아래에..)

    > 이 유닛에 포함된 함수안에는 StrToInt()라는 함수가 있는데 이 부분에서 에러가 납니다. 에러난 함수 가 어느 모듈에 포함되어 있는가 알아보았더니 SysUtils에 있는것 같아서 이유닛의 Interface절 아래에 uses절을 만들어서 포함시켜도 같은 에러가 나고 uses절 자체도 인식을 하지 못합니다...

    >

    > 제발 절 좀 도와 주실분 계세요.???

    >

    > 혹시 다른 프로젝트 옵션을 셋팅해 줘야 하는지...

    > 아니면 공용유닛에 다른 무언가를 집어넣어야 하는지....

    > ---------------------------------------

    > 호출하는 유닛

    > unit ddd;

    > interface

    > uses

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

    > URLabels, StdCtrls, kongyoung;

    > type

    > TForm1 = class(TForm)

    > Edit1: TEdit;

    > wLabel1: TwLabel;

    > procedure Edit1KeyPress(Sender: TObject; var Key: Char);

    > private

    > { Private declarations }

    > public

    > { Public declarations }

    > end;

    > var

    > Form1: TForm1;

    > implementation

    > {$R *.DFM}

    > procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

    > begin

    > if Key = #13 then begin

    > wLabel1.Caption := Digit_to_Kum(Edit1.Text);

    > Edit1.SelectAll;

    > end;

    > end;

    > end.

    >

    > 호출받는 공용유닛

    > (이 유닛에 각종 함수나 프로시져를 선언,정의 할려고 합니다.)

    > unit kongyoung;

    > interface

    > function Digit_to_kum(str : string): string;

    > implementation

    > function Digit_to_kum(str : string): string;

    > var

    > aStr : array[1..11] of String;

    > Input_Str : String;

    > sMony : String;

    > aMony : array[1..09] of String;

    > i : integer;

    > begin

    > Input_Str := str;

    > sMony := '';

    > aMony[1] := '일';

    > aMony[2] := '이';

    > aMony[3] := '삼';

    > aMony[4] := '사';

    > aMony[5] := '오';

    > aMony[6] := '육';

    > aMony[7] := '칠';

    > aMony[8] := '팔';

    > aMony[9] := '구';

    >

    > for i := 10 downto 1 do begin

    > aStr[i] := copy( Input_Str, Length(Input_Str), 1 );

    > if aStr[i] = '' then aStr[i] := '0';

    > Input_Str := copy(Input_Str,1,Length(Input_Str)-1);

    > end;

    >

    > for i := 1 to 10 do begin

    > if aStr[i] = '0' then Continue;

    > sMony := sMony + aMony[StrToInt(aStr[i])];

    >

    > if i = 1 then sMony := sMony + '조'

    > else if i = 2 then sMony := sMony + '억'

    > else if (i = 3) and (aStr[i+1] = '0')

    > then sMony := sMony + '천만'

    > else if i = 3 then sMony := sMony + '천'

    > else if (i = 4) and (aStr[i+1]='0')

    > then sMony := sMony + '백만'

    > else if i = 4 then sMony := sMony + '백'

    > else if (i = 5) and (aStr[i+1] = '0')

    > then sMony := sMony + '십만'

    > else if i = 5 then sMony := sMony + '십'

    > else if i = 6 then sMony := sMony + '만'

    > else if i = 7 then sMony := sMony + '천'

    > else if i = 8 then sMony := sMony + '백'

    > else if i = 9 then sMony := sMony + '십';

    > end;

    > if sMony = '' then sMony := '영';

    > Result := '₩' + sMony + '원정';

    > end;

    > end.

    >

  • Profile
    클마스 2001.02.24 18:55
    프로젝트를 관리할 때 아마도 업무 단위로 각각의 폴더를 만들어 사용하실 겁니다.



    그러면 공통으로 쓰는 폼이나 유닛도 그렇게 따로 폴더를 만들고



    그것을 쓰고자 하는 프로젝트에서 호출만 하시면 되겠죠



    그 방법은



    앞에서 일영님이 말씀하신 것처럼 Uses 에 유닛 이름을 추가하고



    Project > Options > Directories/Conditionals > Search Path 를 이용하셔서



    공통 유닛이 있는 폴더를 지정하시면 됩니다.