Q&A

  • 한오브젝트의 Parent안에 존재하는 모든 오브젝트를 아는방법?
안녕하세요?



늘 해결해야 할 일이 생길때면 한델에서 고수님들이 작성하신 코드를 보고

깨달음을 얻곤 했었는데,

오늘은 제가 질문할 내용을 찾을 수가 없어서 이러케 직접 질문을 올립니다...



제가 하려고 하는 작업은 1024*768로 작성된 소스를 800*600으로 변경해서도 제대로

볼수 있게 하려고 합니다...

그러다 보니 컴포넌트의 위치,크기,폰트 모두가 문제가 되는군요...



만약에 Parent를 Form1이라고 알려주면 그안에 존재하는 모든 컴포넌트를 찾아서

각각의 위치,크기,폰트를 변경하기만 하면 간단하게 해결될것 같은데...



아무튼간 고수님들의 조언과 도움 부탁드립니다...

5  COMMENTS
  • Profile
    고종일 2000.04.27 02:48
    //프로시져입니다.

    procedure ComponentAlign(var myForm: TForm);

    var i : Integer;

    begin

    with myForm do

    begin

    For i:= 0 to ComponentCount -1 do

    begin

    if (Components[i] is TEdit) then

    TEdit(Components[i]).Left := 10

    else if (Components[i] is TMaskEdit) then

    TMaskEdit(Components[i]).Left := 10;

    end;

    end;

    end;



    //호출하는 곳입니다..

    procedure TForm1.SpeedButton1Click(Sender: TObject);

    begin

    ComponentAlign(TForm(Form1));

    end;





  • Profile
    선희 2000.04.27 03:51
    제 질문에 답변해주시고 이 문제를 함께 고민해 주시는 모든 분들께

    감사드립니다...



    저도 질문을 올려놓고 여러가지로 테스트를 해보았는데,

    Components[i]로 바꿔줄수 있는 속성은 TControl의 Left,Top,Width,Height뿐이더군요...

    (화면모드 전환에 관계된 속성중에서...)



    문제는 TControl의 Font속성이 Published된 상태가 아니어서 Font를 변경할 수 없다는 겁니다..



    그래서 TControl에서 상속받아 Font속성을 추가한 타입을 정의했는데,

    어떠케 불러서 Font를 변경해야 할지 모르겠습니다...



    그것도 방법을 아신다면 좀 부탁드립니다...





    고종일 wrote:

    > //프로시져입니다.

    > procedure ComponentAlign(var myForm: TForm);

    > var i : Integer;

    > begin

    > with myForm do

    > begin

    > For i:= 0 to ComponentCount -1 do

    > begin

    > if (Components[i] is TEdit) then

    > TEdit(Components[i]).Left := 10

    > else if (Components[i] is TMaskEdit) then

    > TMaskEdit(Components[i]).Left := 10;

    > end;

    > end;

    > end;

    >

    > //호출하는 곳입니다..

    > procedure TForm1.SpeedButton1Click(Sender: TObject);

    > begin

    > ComponentAlign(TForm(Form1));

    > end;

    >

    >

  • Profile
    최용일 2000.04.27 04:17
    안녕하세요. 최용일입니다.



    TControl의 Font속성은 Protected모드로 접근이 불가능하지만 다음과 같은 방법을 쓰시면



    접근이 가능합니다. 나머지 Protected모드 속성도 이러한 방법으로 접근하세요.



    type

    TMyControl = class(TControl)

    published

    property Font;

    end;



    ...

    var

    I: Integer;

    begin

    for I := 0 to Form1.ComponentCount - 1 do

    TMyControl(Form1.Components[I]).Font.Color := clWhite;

    end;



    ^^ 항상 즐코하세요.



    Components

    선희 wrote:

    > 제 질문에 답변해주시고 이 문제를 함께 고민해 주시는 모든 분들께

    > 감사드립니다...

    >

    > 저도 질문을 올려놓고 여러가지로 테스트를 해보았는데,

    > Components[i]로 바꿔줄수 있는 속성은 TControl의 Left,Top,Width,Height뿐이더군요...

    > (화면모드 전환에 관계된 속성중에서...)

    >

    > 문제는 TControl의 Font속성이 Published된 상태가 아니어서 Font를 변경할 수 없다는 겁니다..

    >

    > 그래서 TControl에서 상속받아 Font속성을 추가한 타입을 정의했는데,

    > 어떠케 불러서 Font를 변경해야 할지 모르겠습니다...

    >

    > 그것도 방법을 아신다면 좀 부탁드립니다...

    >

    >

    > 고종일 wrote:

    > > //프로시져입니다.

    > > procedure ComponentAlign(var myForm: TForm);

    > > var i : Integer;

    > > begin

    > > with myForm do

    > > begin

    > > For i:= 0 to ComponentCount -1 do

    > > begin

    > > if (Components[i] is TEdit) then

    > > TEdit(Components[i]).Left := 10

    > > else if (Components[i] is TMaskEdit) then

    > > TMaskEdit(Components[i]).Left := 10;

    > > end;

    > > end;

    > > end;

    > >

    > > //호출하는 곳입니다..

    > > procedure TForm1.SpeedButton1Click(Sender: TObject);

    > > begin

    > > ComponentAlign(TForm(Form1));

    > > end;

    > >

    > >

  • Profile
    선희 2000.04.27 19:05
    안녕하세요,

    선희입니다... 여러분의 도움으로 어제 올린 질문에 대한 해답을 모두 찾았습니다...



    제가 하려고 했던 작업은 1024*768모드로 작업된 화면을 디자인을 고치지 않고

    800*600 모드에 적합한 화면으로 고치는 일이였습니다...



    먼저 각 컨트롤의 Left,Top,Width,Height 속성은 Components[i].(Left,Top,Width,Height)

    에서 고쳐도 되고

    Form.Scaled := True;

    Form.ScaleBy(800,1024); 코드로도 쉽게 변환이 가능합니다...



    그리고 Font속성은 최용일님이 말씀하신 그대로 이더군요...

    그런데 Font속성의 경우 NonVisible 컴포넌트의 경우에는 에러가 생기더군요



    그래서



    for I := 0 to Form1.ComponentCount - 1 do

    If Components[i] is TControl then // <====이코드를 추가하면 됩니다...

    TMyControl(Form1.Components[I]).Font.Color := clWhite;



    도움을 주신 최용일님,고종일님, 하얀 노래님,그리고 전철우님께도 감사드립니다...



    그리고 이글이 저와같은 작업을 하시려는 분들께도 도움이 되길 바랍니다 ^^....



    최용일 wrote:

    > 안녕하세요. 최용일입니다.

    >

    > TControl의 Font속성은 Protected모드로 접근이 불가능하지만 다음과 같은 방법을 쓰시면

    >

    > 접근이 가능합니다. 나머지 Protected모드 속성도 이러한 방법으로 접근하세요.

    >

    > type

    > TMyControl = class(TControl)

    > published

    > property Font;

    > end;

    >

    > ...

    > var

    > I: Integer;

    > begin

    > for I := 0 to Form1.ComponentCount - 1 do

    > TMyControl(Form1.Components[I]).Font.Color := clWhite;

    > end;

    >

    > ^^ 항상 즐코하세요.

    >



  • Profile
    하얀노래 2000.04.26 23:20


    안녕하세요

    저도 예전에 프로젝트 진행중에 그런일이 있었거든요..

    1024로 백개가 넘는 모듈을 만들었는데 800모드가 필요하다고 하던군요..

    만약 필요하시다면 800모드용 프로그램을 만드는방법밖에 없을듯 싶군요..

    Form에서 오른쪽버튼클릭하면 scale기능이 있습니다..

    크기조절을 할수가 있더군요..이작업이 더 간단하지 않을까 생각합니다..

    그럼.. 참고만 하시길^^





    선희 wrote:

    > 안녕하세요?

    >

    > 늘 해결해야 할 일이 생길때면 한델에서 고수님들이 작성하신 코드를 보고

    > 깨달음을 얻곤 했었는데,

    > 오늘은 제가 질문할 내용을 찾을 수가 없어서 이러케 직접 질문을 올립니다...

    >

    > 제가 하려고 하는 작업은 1024*768로 작성된 소스를 800*600으로 변경해서도 제대로

    > 볼수 있게 하려고 합니다...

    > 그러다 보니 컴포넌트의 위치,크기,폰트 모두가 문제가 되는군요...

    >

    > 만약에 Parent를 Form1이라고 알려주면 그안에 존재하는 모든 컴포넌트를 찾아서

    > 각각의 위치,크기,폰트를 변경하기만 하면 간단하게 해결될것 같은데...

    >

    > 아무튼간 고수님들의 조언과 도움 부탁드립니다...

    • 이기현
    • 2000.04.26 23:54
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 사발우성
      2000.04.27 00:58
      이기현 wrote: > /////////////////////////////// > procedure TForm1.SetCursorBtnClick(Sender: TObje...
    • 사발우성
      2000.04.27 00:22
      이기현 wrote: > /////////////////////////////// > procedure TForm1.SetCursorBtnClick(Sender: TObje...
    • 이기현
      2000.04.27 00:31
      // Crrsor:=10; 에서 에러가 나걸랑요 // 철자가 틀린가 같은데요. 저는 아무이상 없었요. // 또는 Missi...
    • 사발우성
      2000.04.27 00:13
      이기현 wrote: > /////////////////////////////// > procedure TForm1.SetCursorBtnClick(Sender: TObje...
    • xref
    • 2000.04.26 23:31
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 어린왕자
      2000.04.27 04:37
      xref wrote: > 델파이에 입문한지 얼마 되지 않습니다. 다름이 아니라 DB프로그램을 짰는데 > 컴파일후 ...
    • 이기현
      2000.04.27 01:55
      ////////////////////// 애니메이션 동우회 에서 물어 보세요. 사용하는 도구들을 많이 알려주것으로 보...
    • 선희
    • 2000.04.26 22:43
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 고종일
      2000.04.27 02:48
      //프로시져입니다. procedure ComponentAlign(var myForm: TForm); var i : Integer; begin with myF...
    • 선희
      2000.04.27 03:51
      제 질문에 답변해주시고 이 문제를 함께 고민해 주시는 모든 분들께 감사드립니다... 저도 질문을 올려...
    • 최용일
      2000.04.27 04:17
      안녕하세요. 최용일입니다. TControl의 Font속성은 Protected모드로 접근이 불가능하지만 다음과 같은 ...
    • 선희
      2000.04.27 19:05
      안녕하세요, 선희입니다... 여러분의 도움으로 어제 올린 질문에 대한 해답을 모두 찾았습니다... 제...
    • 하얀노래
      2000.04.26 23:20
      안녕하세요 저도 예전에 프로젝트 진행중에 그런일이 있었거든요.. 1024로 백개가 넘는 모듈을 만들었...
    • killer
      2000.04.26 22:02
      성 일호 wrote: > NT server 4 에서 delphi 5 를 실행하면 component 가 딱 한개만 나타납니다. > Admini...
    • 성 일호
      2000.04.26 23:31
      권한설정에는 문제가 없습니다. 왜냐하면 처음에는 *.bpl 파일 접근권한에 문제가 있는줄 알고 권한을 바...
    • 이기현
      2000.04.28 00:48
      ///////////////////////////////////////// // 디렉토리 내의 File검색 procedure TForm1.Button2Click(...
    • 김태형
      2000.04.26 22:04
      > > 질문) > 현재 paradox형태의 db화일을 열고 > 그 db 화일내에서 sql의 WHERE를 이용해 > 이름을 검...
    • 윤찬석
      2000.04.28 02:46
      답변 감사합니다. 다름이 아니라 GetTableNames Help를 보니,, 이게 제가 원하는건지 확실히 모르겠어서 ...
    • 잠꾼
      2000.06.17 07:26
      호. 문제 답이 다 나온거 같은 데엽.. 쩝.. 밑에 TableList.Items[..] 를 Sqldp Db 이름 으로 사용 해서 ...
    • 윤영균
    • 2000.04.26 19:53
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.04.27 04:23
      안녕하세요. 최용일입니다. 3.0이하는 한번도 안써봐서... 만약에 IMM유닛이 2.0에 있다면 아래의 방법...
    • parkisu
      2000.04.26 20:16
      윤영균 wrote: > >안녕하십니까 > > 한/영키 자동변환에 관한 TIP을 보면 각 COMPONENT에 IMEMODE가 있...
    • 강인규
      2000.04.26 20:00
      인스톨하는 경로에 data란 하위폴더 라면..... data 경로를 이렇게 써주시면 됩니다. 인스톨 위치에 ...
    • HART
      2000.04.26 18:53
      아래 검색을 location 이란는 문장으로 하지 말고. Sql 문장에서 검색하면 아래와 같은 문제를 없을 것 ...
    • nilriri
      2000.04.26 19:11
      뭔가 이상한것이... 아래와 같은 기능을 하는데 왜 table1과 datasource1이 등장을 하는지요??? 이렇...
    • techie
    • 2000.04.26 14:56
    • 0 COMMENTS
    • /
    • 0 LIKES
    • mad
    • 2000.04.26 12:55
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 김일영
      2000.04.26 13:12
      mad님 좀 실망인데요. mad님을 도와주시는 분들이 여러 분 계신데 결과가 좋으면 아무런 말씀도 더 이상 ...
    • mad
      2000.04.26 23:59
      죄송합니다. 많은 분들이 답변을 해 주셨는데... 아무말도 않고 제가 나쁜 놈이죠.. 제가 질문을 해놓고 ...
    • 장지용
      2000.04.29 00:52
      동문서답하는건지 모르겠습니다만... 앞에 "0" 을 붙이면서 증가하시면 어떨까요??? function TForm.Ge...
    • 김일영
      2000.04.26 12:28
      가장 바람직한 방법은 DB에 Unique Constraint를 부여하는 것인데 어떤 DB를 어떻게 연결해서 쓰고 계신지...
    • 강인규
      2000.04.26 11:40
      여러가지 방법이 있겠지만 이런 방법도 하나의 예가 될 수 있겠네요. 신규입력 후 확인시에 검사만 한다...
    • 이기현
      2000.04.26 11:36
      //////////////////////////////////////////////////////// procedure TSearchDlg.SearchButtonClick(Sen...
    • 이기현
      2000.04.26 11:18
      ////////////////////////////// procedure TForm1.Button1Click(Sender: TObject); begin Table1.Emp...
    • 이기현
      2000.04.26 11:46
      procedure TForm3.SpeedButton1Click(Sender: TObject); var LicenseNo: LongInt; begin Table1.Op...
    • 이기현
      2000.04.26 11:13
      /////////////////////////////// procedure TForm3.SpeedButton1Click(Sender: TObject); begin Tabl...
    • mad
      2000.04.26 11:28
      제가 회원번호를 Alpha로 해서 그런지 디비의 레코드가 레코드/회원번호 1 1 2 11 3 ...
    • 이기현
      2000.04.27 00:58
      ////////////////////////////////////////////////////////////// Table에 (회원번호에 Secondary Indexe...