DELPHI의 Variant형 배열의 count를 알아내는 방법입니다.
String이나 Integer형의 배열 같은 경우...
hight( array_name) (일차원)혹은.. hight( array_name[0]) (이차원)이런 식으로 Count를 확인할 수 있지만 Variant형은 좀 다릅니다.
간단한 예로 버튼에 테스트해 보았습니다.
Variant의 2차원 배열입니다. 쉽게 Grid를 생각하시면 됩니다.
Col := 3 , Row := 5 // 0~3 , 0~5 이므로 4 * 6의 Grid입니다. 좀 헷갈리네요..
VarArrayCreate 함수를 이용하여 배열처럼 만들 수 있습니다.
High값은.. 0, 1이 아님 주의!
VarArrayHighBound( 배열이름, 1 ) <-- 2차원 배열의 첫 번째 --> Col
VarArrayHighBound( 배열이름, 2 ) <-- 2차원 배열의 두 번째 --> Row
Low값은
VarArrayLowBound( .... )
그래서 선언한 값을 아래처럼 찍어보면 3, 5가 나옵니다. 혼동하기 쉽습니다.
저도 Count 때문에 빈번하게 실수를 합니다.
0~3까지 Count를 해야 하기 때문에 사이즈는 4 , 6 이 되겠습니다.
그리드로 표현해보면, 2차원 배열이 아래와 같습니다.
너무 간단한 예제이기 때문에 ..
배열을 아예 없애버리시려면
VarClear(배열이름)를 하시면 됩니다.
그렇다고.... VarArrayCreate로 정의 한 사이즈는 그대로이고 안에 있는 값만 초기화되는 건 아닙니다.
그냥 사라져 버립니다. 그래서..
이후에 vv[0,0] := 'test'; 이렇게 하면 EVariantInvalidArgError 오류가 발생합니다.
안에 있는 값만 다시 초기화하려면.. 부분적으로 null을 대입해주시던가 아니면 VarArrayCreate로 다시 재생성해주셔야 합니다.
'프로그래밍 > delphi' 카테고리의 다른 글
delphi overload (0) | 2017.09.21 |
---|---|
DELPHI 함수 프로시저에서 매개변수 전달방식 (0) | 2017.09.20 |
DELPHI 패널위에 폼 또는 DLL폼 올리기 최종.. (0) | 2017.03.22 |
DELPHI CreateParented 로 패널 또는 폼안에 집어넜을 때의 문제점 발견. (0) | 2016.03.10 |
스포트라이트 control + space 단축키변경하기 개발툴 충돌로.. (0) | 2016.03.09 |
댓글