Q&A

  • 레코드포인터를 식별하는 방법?
안녕하세요.
트리뷰를 가지고 작업하던중 질문을 하나 올립니다.
트리노드등의 data에 노드의 level에 따라 서로 다른 레코드형의 포인터가 들어 있습니다.
트리뷰의 change이벤트에서 data의 값을 가지고 작업하는데 노드마다 레코드형이 다르다보니 typecasting을 자동으로 할수 없습니다.
제가 알고싶은것은 클라스에 적용되는 is연산자처럼 레코드의 포인터를 식별하는 방법이 있는가 하는겁니다.

prec1=^trec1;
trec1=record
...
end;
prec2=^trec2;
trec2=record
...
end;
...
if vpointer is prec2 then ...

이런게 가능한가요?
기초가 없으니 매번 터무니없는 질문만 올리게되네요.
2  COMMENTS
  • Profile
    최용일 2008.08.14 23:48
    is연산자는 쓸 수 없습니다.
    트리뷰 노드의 Data에 들어가는 레코드형에 레벨에 따라 동적으로 자료가 바뀌도록 형을 만들어서 사용하시는것이 좋을것 같네요...
    아래와 같이 하시면 형변환이 거의 필요가 없어집니다.
    레코드형대신에 객체를 만들어서 넣으시면 is연산자를 쓸 수 있지만... 좀 무겁죠...


    type
    // Level 0 데이터
    PDataLevel0= ^TDataLevel0
    TDataLevel0 = record
    Field0: Integer;
    end;

    // Level 1 데이터
    PDataLevel1 = ^TDataLevel1;
    TDataLevel1 = record
    Field1: Word;
    end;

    // Level 2 데이터
    PDataLevel2 = ^TDataLevel2;
    TDataLevel2 = record
    Field2: Byte;
    end;

    // 노드에 실제 들어가는 레코드형
    PNodeData = ^TNodeData;
    TNodeData = record
    case Level: Integer of
    0: (Data0: TDataLevel0); // 정적인 TDataLevel0대신에 포인터인 PDataLevel0을 사용해도 됩니다.
    1: (Data1: TDataLevel1); // 다만 포인터 관리만 잘 하시면...
    2: (Data2: TDataLevel2);
    end;


    트리뷰의 노드에는 PNodeData를 넣으시고 노드에 있는 데이터의 식별은 PNodeData의 Level이란 필드로 검사하시면 쉽게 하실 수 있습니다.


    begin
    NodeData := PNodeData(TreeNode.Data);

    case NodeData.Level of
    0: NodeData.Field0 := 10; // Level 0일 때 처리
    1: ...; // Level 1일 때 처리
    2: ...; // Level 2일 때 처리
    end;

    혹은

    if NodeData.Level = 0 then
    ... // Level 0일 때 처리
    else if NodeData.Level = 1 then
    ... // Level 2일 때 처리
    else if NodeData.Level = 2 then
    ...; // Level 2일 때 처리
    end;
  • Profile
    steps 2008.08.15 00:40
    용일님 정말 감사합니다.
    • 박상윤
      2008.10.03 01:24
      mediainfo 라는 오픈소스가 있습니다.. 모두다 된다고 볼수는 없만.. 거의 대부분 찾아 냅니다. 검색해...
    • 이정욱
      2008.08.27 10:44
      PPT는 모르고...Flash 생성은... Delphi Flash 컴포넌트를 이용해서 가능한것으로 알고 있습니다 ^^; 흉...
    • 박성준
      2008.08.27 19:02
      PPT 이어야 합니다. ^^ 그런데, Flash라... 음... 고민해봐야 될 문제 인 것 같습니다.
    • 누룽지
    • 2008.08.23 00:09
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2008.08.24 08:32
      자도 오늘 트라이얼을 설치 했는데 pdf 파일이 있던데요. 그걸 읽어 보시면 될 것 같습니다.
    • 김호정
    • 2008.08.22 21:10
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 임대순
      2008.09.03 01:46
      예전 저하고 비슷한 경우인거 같네요... 우선은 먼저 비교부분이 애매모 합니다. 가령 한 예로 들...
    • 민영창
    • 2008.08.22 20:08
    • 0 COMMENTS
    • /
    • 0 LIKES
    • steps
    • 2008.08.22 01:21
    • 5 COMMENTS
    • /
    • 0 LIKES
    • steps
      2008.08.22 02:49
      아래 코드로 걍 맞춰놓긴 했는데요. repeat until을 쓴게 보기 싫습니다. 웹브라우저를 쓰지않고 인디...
    • 이정욱
      2008.08.22 05:38
      http 프로토콜에 대해서 조금 더 알아보셔야 합니다. 인터넷 익스플로러에서 로그인 했다고 해서, 오...
    • steps
      2008.08.22 05:51
      정욱님 답변 감사드립니다. 로그인 한후에 쿠키를 리용하려면 iddhttp의 AllowCookies를 true로 해주고 ...
    • 이정욱
      2008.08.24 08:24
      쿠키 메니저를 달고, 로그인 절차를 거치셔야 합니다. Post 방법으로 로그인 절차를 해보시구요 ^^
    • steps
      2008.08.24 19:54
      이정욱님 감사합니다.
    • 장성호
      2008.08.22 19:40
      Delphi의 힌트는 TApplication 객체에서 관리합니다. 그런데 TListView는 win32 컨트롤을 슈퍼클래싱...
    • 장성호
      2008.08.22 20:00
      아 방금 정확한 방법을 찾았습니다. 위 방법으로 해도 되긴 되지만 꼼수이구... 아래와 같이 하시...
    • 장성호
      2008.08.22 20:26
      참고하세요 http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=795
    • 이종운
      2008.08.23 01:04
      장성호님 답변 정말 감사합니다. 그런데, 제가 짧은 델파이 경력으로 어떻게 써야 할지.. 잘 몰라서요...
    • 장성호
      2008.08.23 01:24
      유닛 commctrl 에 있습니다. uses commstrl ; 그럼..
    • 이종운
      2008.08.25 20:18
      장성호님 답변 감사합니다. 좋은좋은 하루 되세요~ 꾸벅!
    • 최용일
      2008.08.21 22:34
      그냥 const로 선언하세요. 너무 기니까 줄을 바꿔서 쓰시면 됩니다. 문자열 연결은 +로 하시구요. co...
    • 박정순
      2008.08.22 01:38
      저는 <!--CodeS--> const LongConst = 'data1 data2 data3'; <!--CodeE--> 이렇게 ...
    • 김호정
    • 2008.08.21 06:33
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이윤도
      2008.08.27 05:25
      procedure TForm1.RealGrid1DrawCell(AColumn: TwColumn; ARow: Integer; var Text: String; var BC...
    • 아르스
    • 2008.08.20 21:04
    • 3 COMMENTS
    • /
    • 0 LIKES
    • steps
      2008.08.20 21:16
      str := 'aaa/bb/ccc/ddddd'; rstr := reversestring(str); result := reversestring(copy(rstr, 1, p...
    • 이정욱
      2008.08.20 21:18
      function ExtractLast(const Str: string): string; var I: Integer; begin I := LastDelimite...
    • 아르스
      2008.08.20 21:24
      감사합니다. reversestring() 이랑 LastDelimiter() 이 있었군요...
    • 안학순
    • 2008.08.19 23:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이종탁
      2008.08.26 20:37
      DBGrid 는 테이블에 대한 일종의 터미널 같은 기능이니 Query 객체로 조작하면 됩니다. DB 종류나 Que...
    • 혀노
    • 2008.08.18 23:20
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2008.08.19 18:45
      그냥 중학교 정도의 간단한 수학인데.... 800:축소된높이=원본너비:원본높이 축소된높이=800*원본높...
    • 혀노
      2008.08.19 19:15
      축소 길이 계산이 문제가 아니라 축소되어서 저장이 안되어서_- (소스 적힌 축소 길이는 그냥 적은거)
    • 최용일
      2008.08.19 19:25
      음... 특정필드의 값의 표시를 바꿀려면 OnGetText이벤트에서 바꾸세요.... procedure TForm1.Table...
    • steps
      2008.08.17 02:50
      image321이름이나 .bitmap.handle을 쓴걸 봐선 graphics32를 쓰신것같은데 왜 bitblt를 쓰시는지요? 걍 ...
    • 신디
      2008.08.17 20:29
      아 . 그렇군요 이런 방법이 있었네요. 감사합니다.^^
    • steps
    • 2008.08.14 23:08
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2008.08.14 23:48
      is연산자는 쓸 수 없습니다. 트리뷰 노드의 Data에 들어가는 레코드형에 레벨에 따라 동적으로 자료가 ...
    • steps
      2008.08.15 00:40
      용일님 정말 감사합니다.
    • 최용일
      2008.08.14 22:08
      Base64 인코딩/디코딩하는 모듈은 이미 많이 나와 있습니다. 굳이 ASP를 델파이로 변경해서 쓸 필요없이...
    • 최길남
      2008.08.14 22:51
      이미 검색은 다해보고 여러가지 다운로드해서 테스트도 해봤습니다. 그런데 자료실에 있는 모듈과 결과가...
    • 최용일
      2008.08.14 23:01
      흠... 저건 어느 언어로 코딩해도 똑같을 수 밖에 없는데... 어떻게 다르나요? 혹시... ASP니까 웹에서...
    • 최길남
      2008.08.14 23:29
      1234 를 Base64 인코딩하면 MTIzNA== 라고 나와야 하는데요. 위 ASP 함수는 OVK1PECi ...
    • 최용일
      2008.08.15 00:33
      음... 다른 결과가 나오는군요.... 쩝~ 최대한 기본 틀을 안바꿀려고 했는데 언어상의 차이 때문에 좀...
    • 최길남
      2008.08.15 00:46
      정말 감사합니다.. 좋은 하루 되세요.. ^_^
    • 반민석
      2010.04.16 17:18
      이싸이트 참고 하세요 : http://www.delphi3000.com/articles/article_3404.asp?SK=base64