Virtual Mode 적용하기 Spread
* Spread Virtual Mode
1. 해당 Query의 Count를 구한다.(.VirtualMaxRows)
'Virtual Mode 초기화
lngLastRow = getDataRecordCount '해당 Query의 Count를 구한다.
'lngLastRow는 전역변수로 설정하여 사용하도록 한다.(출력라인 계산시 필요)
Private Function getDataRecordCount() As Long
Dim StrPos As Long
Dim RetValue As Long
RetValue = 0
On Error GoTo Err_H
If Rs_Open(SQL_CNT, "N", "Y") = False Then
RS.Close
Exit Function
End If
RetValue = CLng(RS!ROW_COUNT)
getDataRecordCount = RetValue
Exit Function
Err_H:
getDataRecordCount = 0
End Function
2. VirtualMode를 True로 설정한다.
vaSpread1.VirtualMaxRows = lngLastRow
3. VirtualMode가 설정되면 발생하는 Event인 QueryData에 출력할 내용을 적는다.
- 출력시마다 출력할 라인수를 구하는 로직 필요.
- Direction에 따른 라인 위치 구하는 로직 필요.
Private Sub vaSpread1_QueryData(ByVal Row As Long, ByVal RowsNeeded As Long, RowsLoaded As Long, ByVal Direction As Integer, AtTop As Boolean, AtBottom As Boolean)
Dim lngEnd As Long
Dim lngRow As Long
'RowsNeeded 값은 Spread의 Height에 따라 보여주어야 할 Row수인데, Default 값의 2배를 조회할 수 있도록 하였다.
RowsNeeded = RowsNeeded * 10
GET_ROW_NEED_CNT = RowsNeeded
Select Case Direction
Case DATA_DOWN, DATA_BOTTOM, DATA_TOP, DATA_UP:
lngEnd = Row + RowsNeeded
If lngEnd > lngLastRow Then lngEnd = lngLastRow
Case Else:
Exit Sub
End Select
'Query 출력 함수(showQryData)
If showQryData(Row, lngEnd, False) = False Then
Screen.MousePointer = vbDefault
Exit Sub
End If
Screen.MousePointer = vbDefault
RowsLoaded = Abs(lngEnd - Row) + 1
AtTop = (1 = lngEnd)
AtBottom = (lngLastRow = lngEnd)
End Sub
'시작,종료 ROW에 해당하는 Data를 조회하여 Spread에 Display한다.
Private Function showQryData(START_ROW As Long, END_ROW As Long, ISFROM As Boolean) As Boolean
'새로 조회해야할 Query
SSQL = getSSQLScript(START_ROW, END_ROW)
If Rs_Open(SSQL, "N", "Y") = False Then
RS.Close
Exit Function
End If
With vaSpread1
Do Until RS.EOF
.Row = RowCnt
'출력내용......
RowCnt = RowCnt + 1
RS.MoveNext
Loop
End With
RS.Close
showQryData = True
End Function
'OLD_SSQL Script에 ROWNUM Field를 삽입하여 원하는 Row num, 개수를 Query 하는 Script를 만든다.
Private Function getSSQLScript(Start_Num As Long, End_Num As Long) As String
Dim TempSSQL As String
Dim RetSSQL As String
If End_Num <= 0 Then
GoTo Err_H
End If
'ROWNUM Field를 삽입한다.
TempSSQL = " SELECT ROWNUM AS ROW_NUM, OLD_SQL_A.* FROM (" & SQL & ") OLD_SQL_A"
RetSSQL = " SELECT OLD_SQL_B.* FROM ( " & TempSSQL & " ) OLD_SQL_B WHERE ROW_NUM >= " & Start_Num & " AND ROW_NUM <= " & End_Num & " "
getSSQLScript = RetSSQL
Exit Function
Err_H:
getSSQLScript = ""
End Function
# 한번에 모든 Data를 조회할 경우를 대비해 Flag로 정해 한번 Query가 가능하도록 적용한다.
▶ Far Point Spread Designer 사용법
1. Scroll Bars
◎ Settings
- None
- Horizontal
- Vertical
- Both
◎Show Only If Needed : 필요할 때만 보여주기
◎Align at last Row and Column : 마지막 로우와 컬럼에서 멈춘다.(체크 안되면 계속 움직인다.)
◎Box Reflects Max Row : 별 영향 없음.
2. GridLines
◎ Settings
- Show Vertical Lines : 수직라인 보이기
- Show Horizontal Lines : 수평라인 보이기
- Make Grid Lines Solid : 라인이 흐릿하게 보인다.
◎ Back Color Style ---> Back Color가 있을때,
- Over Grid : Cell에 Back Color가 있을때 라인이 안 보인다.
- Under Grid : Back Color가 있어도 라인이 보인다.
- Over Horizontal Lines Only : 수직선만 보인다.
- Over Vertical Lines Only : 수평선만 보인다.
3. Border Lines
◎ Type
- None
- Set Border for Selected Block : 선택한 셀에 선명한 선이 나타난다.
- Set Border for Each Cell : 셀에 대한 오른쪽,왼쪽,위,아래선을 선택할 수 있다.
◎ Style : 라인이 있을때
- Fine : 선을 좀더 선명하게 보여준다.
None
Solid
Dash
Dot
Dash Dot
Dash Dot Dash
4. Cell Color
◎ Property
- BackColor : 바탕색깔
- ForeColor : 글자색깔
5. SpreadSheet Environment
(1) General
- Make Edit Mode Permanent : 셀을 클릭하면 바로 Edit 모드로 들어간다.
- Replace Existing Text : 셀을 선택하고 Edit하면 기존에 글자들이 지워지면서 새롭게
작성된다. (선택안되었을때: 기존글자 뒤에서부터 작성된다.)
- Handle ClipBoard Keys : 기본선택
- Retain Selected Block : 기본선택
- Protect Locked Cells : 기본선택
- Multiple Block Selections
- On Focus Set Cell to Cursor
- Use Arrow Keys to Exit Edit
- Cell Overflow : 문자열이 셀의 길이를 벗어날때 다음 셀까지 합쳐서 보여준다.
- Beep off
- Cell DragDrop
- Hide Border : 스프레드(전체) 외곽의 보더를 감춘다.
- Process Tabkey : 탭키가 가능해진다.
- Autosize On
- Calculate Formulas : 기본선택
- Custom Formulars
- Formula Sync : 기본선택
(2) SheetMode
- Normal : 기본선택
- ReadOnly : 읽기만 가능(코딩으로 데이터를 넣을수는 있다.)
- RowMode : 한 Row 전체가 선택되어진다.(읽기/쓰기 가능)
- Single Selection : ReadOnly + RowMode
- Multiple Selection : ReadOnly + RowMode + 클릭할때마다 계속 선택되어진다.
- Extend Selection : ReadOnly + RowMode + Shift,Ctrl 키로 여러 Row를 선택할수 있다.
(3) Block Mode
- Sheet Mode를 선택할때 마다 최적 상태로 세팅 해준다.(건드리지 않는게 좋다.)
(4) Enter Key
- 셀안에서 엔터키를 칠때 셀이 다음에 어디로 이동될지를 설정한다.
6. Headers
--> Row와 Col의 Header Title을 바꿀때 사용한다.
◎ Display Headers : Header 보이기
◎ User Resize : 셀 사이즈 조절 가능
7. Columns And Rows
--> Row와 Col의 갯수를 설정할때 사용한다.
◎ Max Cols/Rows : 최대 Col/Row 수
◎ Resizeable : 셀 크기조절 가능
8. SpreadSheet Colors
◎ Property
- GrayAreaColor : 스프레드 여백 색깔
- GridColor : Grid Line Color
- ShadowColor : Header 채우기 색깔
- ShadowDark : Header의 외곽선 색깔
- ShadowText : Header의 글자색
9. Virtual Mode
◎ Virtual Scrollbar
- UserSpecial Scrollbar : 페이지 단위로 스크롤, 처음과 끝 보여주기 등의 스크롤바
10. Go To Run-Time Mode
-- > 실행 시키 화면과 같은 효과
11. Button
◎ Text : Button에 글자 넣기
◎ Style
- Push Button : 일반적이 버튼
- Two State : 클릭하면 들어가고 또 다시 클릭하면 튀어나오는 버튼
◎ Color : 버튼 색깔 설정
◎ Picture : 버튼에 그림 넣기
12. Check Box
◎ TextLeft : 글자가 왼쪽에 위치
13. Combo Box
◎ Text에 글자를 넣고 Add/Delete/Update로 Item을 추가/삭제/수정 한다.
◎ Editable : 실행시 Item에 수정 가능
14. Date
--> 데이트형 Edit Mask
◎ Show Cuntury : 년도를 4자리로 보이기
◎ Spin Button : 스핀버튼 보이기
15. Edit
◎ Char Set
- All Char : 모든 문자 허용
- Alpha : 알파벳만 허용
- Alphanumeric : 알파벳과 숫자만 허용
- Numeric : 숫자만 허용
◎ Text Align : 문자 정렬
◎ Char Case : 대/소문자 설정
◎ MultiLine : MultiLine 허용
◎ PassWord : *****문자로 보여주기
◎ Length : 최대 문자수
16. Float
--> 실수형 Mask Edit
◎ Int Digits : 정수 자릿수
◎ Dec Digits : 소수점 아래 자릿수
◎ Money : 금액 단위 표시 ($,\)
◎ Separator : 1000단위 분리자 (,)
17. Integer
--> 정수형 Mask Edit
18. Label(Static) : Label Box
19. Mask(Pic) : Edit Mask
20. Picture : Picture Box
21. Time
Spread에서 ToolTip 보여주기 Spread
1. MouseMove 이벤트 사용
Private Sub vaSpread1_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim Col As Long
Dim Row As Long
With aSpread1
.GetCellFromScreenCoord Col, Row, X, Y '해당 X, Y좌표로 Col, Row위치를 구함.
.Col = Col: .Row = Row
.ToolTipText = .Value '해당 위치에 값을 ToolTip으로 표시
End With
End Sub
'해당 Spread의 마우스이동시마다 이벤트 발생. 마우스 이동시 ToolTip의 깜박임이 심할 수 있습니다.
2. TextTipFetch 이벤트 사용
Private Sub vaSpread1_TextTipFetch(ByVal Col As Long, ByVal Row As Long, MultiLine As Integer, TipWidth As Long, TipText As String, ShowTip As Boolean)
TipText = .CellTag 'CellTag설정시 사용... 생략하면 해당 셀의 값을 Tooltip으로 표시해줌.
TipWidth = 3000
MultiLine = 0 'MultiLine 설정
ShowTip = True
vaSpread1.TextTipDelay = 200 'Delay 설정
End Sub
' TextTipFetch를 사용하려면 먼저 vaSpread1.TextTip의 값을 설정해주어야 합니다. off일경우는 TextTipFetch이벤트는 발생하지 않습니다. MouseMove이벤트 보다는 TextTipFetch이벤트를 사용하는 것이 좀 더 효율적입니다.
출처: http://blog.naver.com/cosmosb612?Redirect=Log&logNo=80029881796