안녕하세요..
주말 다들 잘 보내셨는지요..^^
항상 좋은 일들만 있으시길 바랍니다.
질문은요.. MDI 폼에서 MDI CHILD(a.pas; af(폼이름)) 로 만들 폼의 MEMO 콤포넌트에..
글을 입력하는 내용인데요...
코딩 길이가 너무 길고, 나중에 좀더 편하게 수정하기 위하여
필요한 함수만 모아놓은 별도 pas(b.pas) 를 하나더 만들어 그곳에...
procedure DayInfoTable(day : string;Rday : string); 함수를 만들어
필요데이타만 을 보내면, 그곳에서 데이타파일을 불러서.... 앞의 폼에서
만든 memo 콤포넌트에 쓸려고 합니다...
그래서 우선은 사용한 방법이 uses 절에 앞의 a 를 인클르드 시키고..
밑에서
af.memo 로 해서 입력하면은 될것 같은데요..
생각해 보니.. a.pas 에서 b.pas 를 불르고, b.pas에서 다시 a.pas 를 부르니.. 많이 무식한 방법 같아요..
그런데.. 그렇게..지금 막 코딩해서 컴파일했더니 컴파일에러는 안 나는데..
메모리에서 충돌이 난다고.. 에러가 나네요. ^^;;
고수님들의 조언 부탁드립니다... 아니면.. a.pas내에서 b.pas내에 함수를 부를때, procedure DayInfoTable(day : string;Rday : string, memo : TForm); 으로 이런 식으로 하는 것인지..잘 개념이....
그리고 하나 더 질문드리면, 맨위의 uses 절과...
implementation
다음의 uses 절에 대한 차이를 모르겠어요..^^;;;;;;;
잘 부탁드리고..모든 분들에 가정에 평화가 있으시길 바랍니다...
음 일반적으로 우리가 쓰기 편한 함수들을 모아서 하나의 Pas화일을 만드는 것은 다른 프로젝트에도 그 Pas화일을 유용하게 쓰고자 함입니다.
근데 거기서 지금 프로젝트에 포함된 파일을 uses하시면 다른 프로젝트에서 쓰실때는 그 부분을 수정하셔야겠죠?
그니까 자신만의 함수를 모아서 만드는 Pas 화일은 독립적이어야 합니다.
가령...
Memo 컴포넌트에...주어진 숫자(임의로 StartInt)부터 주어진 숫자(임의로 EndInt)까지 1씩 증가해서 입력하는 함수가 필요하다라고 했을 때
procedure MemoADDInt(MyMemo : TMemo; StartInt : integer; EndInt : integer);
var
Loop : integer;
begin
for Loop := StartInt to EndInt do
begin
MyMemo.Lines.add(IntToStr(Loop));
end;
end;
이렇게 짜두시면... 해당폼에서는 인자 넘겨주시고 위의 함수만을 호출하면 됩니다.. 그럼 괜히 서로가 서로를 uses 해야하는 상황을 피할 수 있습니다.
더 말씀 드리자면... 저 함수를 더욱 유용하게 만들기 위해서는
procedure MemoADDInt(MyObject : TObject ; StartInt : integer; EndInt : integer);
var
Loop : integer;
begin
for Loop := StartInt to EndInt do
begin
if (MyObject is TMemo) then
begin
TMemo(MyObject) .Lines.add(IntToStr(Loop));
end else if (MyObject is TListBox) then
begin
TListBox(MyObject) .Items.add(IntToStr(Loop));
end;
end;
end;
이렇게 만드시면 TMemo 뿐만 아니라 TListBox도 넘길 수 있고...코딩을 더
추가 하신다면 TListView...등등도 넘길 수 있게 되어서...여기저기 프로젝트에서 쉽게 쓸 수 있습니다..
그리고 저렇게 오브젝트 자체를 넘기는 방식으로 짜고 싶지 않다고 하시면...
TMemo 혹은 TObject 대신에 TStrings 를 인자로 해서 짜실 수도 있습니다.
procedure MemoADDInt(MyItems : TStrings; StartInt : integer; EndInt : integer);
var
Loop : integer;
begin
for Loop := StartInt to EndInt do
begin
MyItems.add(IntTOStr(Loop ));
end;
end;
이렇게 하시고 호출하실 때
MemoAddInt(Memo1.Lines,1,100); 이런식으로 하시면 됩니다..
어쨌건...결론적으로는 님께서 쓰기 편한 함수들을 모아놓은 Pas화일은
프로젝트 독립적이어야 한다는 겁니다... 클래스 파일 역시 그 파일 안에서
프로젝트의 이 폼 저 폼을 uses 시키는 일이 없도록 독립적으로 만들어 놓아야
다른 프로젝트의 적은 수정으로 그 클래스 파일을 갖다 쓰실 수 있습니다.