트레이딩 및 시장 데이터 데스크
호가판은 수백 개의 가격이 매초 바뀌는 중에도 읽을 수 있어야 합니다. 피드 스레드는 UpdateRow로 쓰며 UI를 기다리지 않고, 변경 시 깜박임은 모든 움직임의 방향을 보여 주며, 테일 모드는 체결 로그를 최신 체결에 맞춰 둡니다. sgcGridWS 브리지는 WebSocket, MQTT, SSE에서 호가를 읽을 수 있습니다.
- 실시간 업데이트
- 변경 시 깜박임
- 테일 모드
- 실시간 피드
쉴 새 없이 변하는 데이터를 위해 만든 그리드입니다. 어떤 스레드에서든 키로 행을 쓰고, 변경된 셀이 녹색 또는 빨간색으로 깜박이는 것을 확인한 다음, 같은 행을 그룹화, 필터링, 편집, 내보내기하세요. 행 100,000개 그리드의 1080p 프레임은 Win32에서 3.0 ms가 걸립니다.
MaxFPS로 조절됩니다.기능 18가지를 5개 그룹으로 나누었으며, 각각 해당 도움말 항목으로 연결됩니다.
멈추지 않는 피드: 가격, 텔레메트리, 큐, 로그.
실시간 데이터
시장 피드, 센서 버스, 작업 큐가 그리드에 바로 쓸 수 있습니다. 모든 행에는 키가 있고, 작업자 스레드는 Synchronize 호출이나 별도의 잠금 코드 없이 필드 이름으로 키의 행을 갱신합니다. 그리드는 쓰기 스레드에서 자신을 더티로 표시하기만 하고, 메인 스레드에서 초당 최대 MaxFPS번만 다시 그립니다.
UpdateRow는 키에 해당하는 이름 있는 필드를 설정하고 키가 새 것이면 행을 삽입하며, UpdateCell은 필드 하나를 변경합니다AppendRow와 DeleteRow는 어떤 스레드에서든 키로 행을 추가하고 제거합니다BeginUpdate와 EndUpdate는 일괄 처리를 단일 알림으로 바꿉니다
실시간 데이터
트레이더와 운영자는 모든 숫자를 읽지 않고도 무엇이 움직였는지 알아야 합니다. 기본값인 FlashChanges를 켜면 값이 오른 셀은 녹색, 내린 셀은 빨간색으로 물들었다가 FlashDuration밀리초(기본 800) 동안 서서히 사라집니다. 로그와 계속 늘어나는 피드에서는 테일 모드가 최신 행을 계속 보여 주다가, 사용자가 읽으려고 위로 스크롤하는 즉시 따라가기를 멈춥니다.
FlashUpColor, FlashDownColor, FlashChangedColor. 색상 0은 테마 기본값을 사용합니다FlashMode는 배경(fmBackground) 또는 텍스트(fmText)를 물들입니다TailMode는 최신 행을 따라가고, MaxRows는 끝없는 로그에서 가장 오래된 행을 삭제합니다
실시간 데이터
연체된 송장, 마이너스 잔액, 실패한 작업은 누가 묻기 전에 눈에 띄어야 합니다. 서식 규칙은 열의 데이터 형식에 맞춰 열 값을 비교합니다. 숫자는 숫자로, 날짜는 날짜로, 텍스트는 대소문자 구분 없이 비교합니다. 일치하는 규칙은 셀 또는 행 전체의 배경색, 글자색, 굵게를 설정하며, 실시간 업데이트로 값이 바뀌는 동안에도 계속 동작합니다.
TsgcGridFormatRules는 규칙을 컬렉션 순서대로 평가하며, 나중에 일치하는 규칙이 앞의 규칙을 덮어씁니다gfoLess, gfoBetween, gfoContains, gfoIsEmpty 같은 연산자를 지원합니다ApplyToRow는 행의 모든 셀에 스타일을 적용하고, StopOnMatch는 셀에 대한 평가를 끝냅니다OnGetCellStyle이 최종 결정권을 가집니다대용량 행 집합을 정렬, 필터링, 그룹화, 중첩합니다.
데이터 가공하기
지역별 매출, 월별 주문, 상태별 티켓처럼 사용자는 원시 행이 아니라 합계를 원합니다. GroupBy는 하나 이상의 열로 그리드를 그룹화하며, 모든 그룹 행에는 구성원, 행 수, 행 요약이 표시됩니다. 사용자는 머리글을 그룹 패널로 끌어서 직접 다시 그룹화합니다. 그룹화는 보기 상태일 뿐이므로, 그리드에 바인딩된 차트는 여전히 평면으로 정렬된 행을 봅니다.
GroupBy와 ClearGrouping을 호출하거나 열별로 GroupIndex를 지정합니다ShowGroupPanel은 끌어서 놓는 칩을 추가하며, 칩을 클릭하면 그룹 순서가 바뀝니다SummaryType은 gsuSum, gsuCount, gsuAverage, gsuMin, gsuMax 중 하나이며 SummaryFormat으로 서식을 지정합니다GroupSummaries와 총합계를 위한 ShowFooterDisplayFormat이 yyyy-mm이면 날짜를 월별로 그룹화합니다
데이터 가공하기
수천 명 중에서 고객 한 명을 찾는 일은 키 몇 번으로 끝나야 합니다. FilterText는 표시된 열 중 하나에라도 입력한 단어가 서식이 적용된 텍스트에 들어 있는 행만 남기고, OnFilterRow 핸들러로 사용자 규칙을 더할 수 있습니다. 머리글을 클릭하면 정렬되고, Ctrl 키를 누르고 클릭하면 다중 열 정렬에 열이 추가되며, 정렬은 안정적입니다. 정렬도 필터도 되지 않은 채 값이 계속 바뀌는 열은 다시 정렬할 필요가 전혀 없습니다.
SortOrder와 SortIndex, 변경할 때마다 OnSortChangeFilterText는 대소문자를 구분하지 않으며 사용자에게 보이는 텍스트를 기준으로 읽습니다OnFilterRow, 로직이 바뀌면 InvalidateViewSelectionMode는 행 또는 셀을 선택하고, Ctrl+C는 탭으로 구분된 텍스트로 복사합니다
데이터 가공하기 Registered 에디션 전용
조직도나 자재 명세서는 트리로, 고객의 주문은 고객 바로 아래에 있을 때 가장 읽기 좋습니다. 트리 행은 키 열과 부모 열을 기준으로 깊이 우선으로 행을 배치합니다. 상세 영역은 모든 마스터 행 아래에 관련 행의 작은 그리드를 열며, 자체 머리글, 스크롤, 정렬을 갖고 TsgcGridDataStore, 다른 그리드 또는 이벤트로 채워집니다.
Tree.KeyField와 Tree.ParentField가 트리를 켜며, ExpandNode와 CollapseNode는 코드에서 동작합니다Detail.MasterKeyField와 Detail.DetailKeyField가 영역을 소스에 연결하고, OnGetDetailData가 필요할 때 채웁니다.NET Community 빌드에는 없으며, 그룹화는 지원합니다.
도움말 항목 읽기
데이터 가공하기
너비가 넓은 그리드는 종목 또는 고객 이름이 스크롤되어 사라지면 맥락을 잃습니다. FrozenColumns는 나머지 열이 가로로 스크롤되는 동안 처음 보이는 열들을 제자리에 유지하며, 머리글, 바닥글, 그룹 요약도 같은 구분을 따릅니다. 사용자는 머리글 가장자리를 끌어 열 크기를 조절하고, 헤드리스 렌더러도 같은 설정을 사용하므로 내보낸 이미지가 화면과 일치합니다. 왼쪽의 그룹 화살표도 스크롤되지 않습니다.
FrozenColumns는 보이는 열의 수를 세며, 1픽셀 선이 고정 경계를 표시합니다FrozenWidth는 스크롤되지 않는 너비를 반환합니다MinWidth는 크기 조절을 제한하고, OnColumnResized는 새 너비를 알려 줍니다
데이터 가공하기
사용자는 Excel에서 익숙한 깔대기를 기대합니다. ShowFilterButtons는 모든 열 머리글에 깔대기를 하나씩 놓습니다. 누르면 해당 열의 고유 값과 행 수, 검색 상자, And 또는 Or로 연결한 형식 지정 조건 최대 2개가 있는 팝업이 열립니다. ShowFilterRow는 머리글 아래에 입력하는 동안 열을 필터링하는 행을 추가하고, Ctrl+F로 여는 찾기 패널은 모든 셀에서 텍스트를 강조 표시하며 일치 항목 사이를 이동합니다.
Column.Filter가 모두 이를 수정하므로 세 가지는 항상 일치합니다FilterRowOperator: 같음, 보다 큼, 포함, 시작 문자, 비어 있음 등FindText, FindNext, FindPrevious는 코드에서도 쓸 수 있고, FindOnlyMatches는 일치하지 않는 행을 숨깁니다FilterText 및 OnFilterRow와 함께 적용되며, OnFilterChange가 변경될 때마다 알려 줍니다VCL, FireMonkey, WinForms, WPF, Avalonia 그리드에서 사용할 수 있으며, 무료 .NET Community 빌드에도 포함됩니다.
도움말 항목 읽기데이터 가공하기
열 머리글을 마우스 오른쪽 버튼으로 클릭하면 정렬, 그룹화, 너비 맞춤, 필터링, 열 선택기 열기를 할 수 있는 메뉴가 나타납니다. 열 선택기는 열마다 확인란이 있는 팝업입니다. 사용자는 머리글을 끌어 열을 옮길 수 있고, 머리글 가장자리를 더블 클릭하면 너비가 캡션과 셀에 맞춰집니다. SaveLayoutToString과 LoadLayoutFromString은 이 모든 것을 짧은 JSON 텍스트로 저장하므로, 그리드는 사용자가 떠난 상태 그대로 열립니다.
HeaderMenu, ColumnMoving, BestFitOnDblClick은 기본적으로 켜져 있으며, 지정한 PopupMenu가 우선합니다ShowColumnChooser는 원하는 버튼이나 메뉴 항목에서 선택기를 엽니다OnColumnMoved가 이동을 알려 줍니다BestFitColumn과 BestFitColumns는 머리글과 최대 1,000개의 샘플 행을 측정하므로, 100만 행도 1,000행과 비슷한 비용이 듭니다SaveLayoutToFile과 LoadLayoutFromFile은 파일을 사용합니다VCL, FireMonkey, WinForms, WPF, Avalonia 그리드에서 사용할 수 있으며, 무료 .NET Community 빌드에도 포함됩니다.
도움말 항목 읽기
데이터 가공하기
거래 화면은 Last, Change, Trend가 하나의 Price 캡션 아래에 모여 있을 때 더 읽기 좋습니다. Bands는 열 그룹 위에 필요한 만큼의 단계로 캡션을 추가하고, 각 열은 Band에 자신의 밴드를 지정합니다. CellKind는 셀을 이미지, 진행률 막대, 스파크라인으로 그리지만 셀은 원래 값을 그대로 유지하므로, 정렬, 그룹화, 내보내기는 계속 숫자를 사용합니다.
Bands.Add는 캡션과 상위 밴드를 받으며, 밴드 행은 열 머리글 위에 쌓입니다gcdProgress는 ProgressMin과 ProgressMax를 사용하고, gcdSparkline은 숫자 목록으로 꺾은선, 영역, 막대 차트를 그립니다gcdImage는 CellImages의 이미지를 그리며, 그리드는 Images에 지정한 이미지 목록 어느 것으로든 이를 채웁니다SelectionMode의 gsmMultiRow는 Ctrl과 Shift로 임의의 행 집합을 선택하고, gsmCellRange는 셀 범위를 선택하며, Ctrl+A는 모두 선택합니다VCL, FireMonkey, WinForms, WPF, Avalonia 그리드에서 사용할 수 있으며, 무료 .NET Community 빌드에도 포함됩니다.
도움말 항목 읽기데이터를 변경하고, 데이터베이스와 동기화하고, 다른 곳으로 넘겨 주세요.
편집과 내보내기 Registered 에디션 전용
백오피스 사용자는 수량이나 상태를 그리드에서 바로 고치길 기대합니다. ReadOnly를 False로 설정하면 F2, Enter, 문자 입력, 더블 클릭으로 셀 위에 에디터가 열리며, 열에 PickList가 있으면 콤보 상자가 열립니다. 입력한 텍스트는 열의 데이터 형식으로 변환되고, OnValidate가 값을 바꾸거나 거부할 수 있으며, 결과는 UpdateCell로 기록되므로 정렬과 깜박임도 그대로 적용됩니다.
Editable, 그리고 OnBeforeEdit로 편집을 거부할 수 있습니다StartEdit, CommitEdit, CancelEdit로 코드에서도 같은 동작을 합니다OnEditError는 잘못된 입력에서 에디터를 열린 채로 유지하고, OnEdited는 이전 값과 새 값을 알려 줍니다.NET Community 빌드에는 없습니다.
도움말 항목 읽기
편집과 내보내기
기존 데이터베이스 코드는 그대로 동작합니다. TsgcGridSource_DataSet는 FireDAC 쿼리, TClientDataSet 또는 다른 모든 TDataSet으로 그리드를 채웁니다. Grid와 DataSet을 설정하고 Active로 만들면 행이 나타납니다. KeyField가 있으면 그리드는 다시 불러오지 않고 동기화되므로, 변경된 행이 제자리에서 갱신되며 깜박입니다. LiveUpdates를 켜면 게시된 모든 Append, Edit, Delete가 추가 코드 없이 그리드에 반영됩니다.
AutoColumns는 데이터셋 필드로 열을 만듭니다KeyField가 있으면 새 키는 추가되고 사라진 키는 삭제됩니다DisableControls로 순회하며 현재 레코드가 복원됩니다GridLoadFromJSONFile, GridSaveToCSVFile 및 sgcGrid_IO의 나머지 함수편집과 내보내기 Registered 에디션 전용
회계 담당자는 스크린샷이 아니라 Excel로 숫자를 원합니다. SaveToXLSX는 외부 라이브러리 없이 그리드를 Office Open XML 통합 문서로 파일이나 스트림에 씁니다. 시트에는 사용자가 보는 그대로, 표시 순서의 보이는 열과 너비, 숫자 서식, 고정된 머리글, 접을 수 있는 윤곽으로 표시된 그룹과 트리 수준, SUBTOTAL 수식으로 쓰인 그룹 합계가 유지됩니다.
SaveToXLSX는 파일 이름 또는 스트림과 선택적인 시트 이름을 받습니다DisplayFormat은 셀 숫자 서식이 됩니다.NET Community 빌드에는 없으며, JSON 및 CSV 내보내기는 지원합니다.
도움말 항목 읽기
편집과 내보내기 Registered 에디션 전용
WriteBack을 켜면 TsgcGridSource_DataSet이 그리드에서 일어난 모든 변경을 해당 행의 레코드에 기록합니다. KeyField로 레코드를 찾아 값을 포스트합니다. 포스트가 실패하면, 예를 들어 BeforePost 검사에서 실패하면 레코드는 취소되고 셀은 이전 값을 유지합니다. SyncCursor는 현재 레코드와 활성 행을 함께 유지하므로, 같은 데이터셋의 TDBNavigator와 TDBEdit 컨트롤은 그리드를 따라가고 그리드도 이들을 따라갑니다.
AllowInsert: Ins는 레코드를 추가하고 포스트하며, 데이터셋의 OnNewRecord가 기본값을 채웁니다AllowDelete: OnBeforeDelete가 동의하면 Ctrl+Del이 선택한 행과 그 레코드를 삭제합니다OnEditError는 데이터셋의 메시지를 표시하며, 붙여넣은 값과 실행 취소도 같은 쓰기 경로를 사용합니다VCL, FireMonkey, WinForms, WPF, Avalonia 그리드에서 사용할 수 있으며, .NET Community 빌드에는 없습니다. .NET에서는 소스가 DataTable에 다시 기록되고, AddLookup이 조회 열을 추가하며, SyncCursor는 Delphi 전용입니다.
편집과 내보내기 Registered 에디션 전용
각 열은 자신을 편집할 컨트롤을 직접 고릅니다. EditorKind는 날짜, 시간, 날짜와 시간 선택기, 화살표가 있는 숫자 상자, 색 선택기, sgcEditors의 토큰 편집기 중에서 고르며, 기본값은 열의 데이터 형식에서 정해집니다. Ctrl+V는 Excel에서 복사한 블록을 붙여넣습니다. 모든 값은 무엇이든 기록하기 전에 변환되고 검증되며, 붙여넣기 전체가 하나의 실행 취소 단계가 됩니다. Ctrl+Z와 Ctrl+Y는 편집과 붙여넣기를 실행 취소하고 다시 실행합니다.
OnCreateEditor는 예를 들어 TTrackBar처럼 원하는 컨트롤을 셀에 놓습니다PasteText와 PasteFromClipboard는 코드에서도 쓸 수 있고, OnBeforePaste는 텍스트를 수정하거나 거부할 수 있습니다OnValidate가 거부하면, 아무것도 기록되기 전에 붙여넣기가 중단됩니다UndoLimit는 최근 100단계를 유지하며, Undo, Redo, CanUndo는 코드에서도 쓸 수 있습니다VCL, FireMonkey, WinForms, WPF, Avalonia 그리드에서 사용할 수 있으며, .NET Community 빌드에는 없습니다.
도움말 항목 읽기수백만 행, 실시간 피드, 일상 언어.
규모와 연결
이미 다른 곳에 있는 로그 보관소, 센서 이력, 쿼리 결과는 메모리에 복사할 필요가 없습니다. 가상 모드에서는 그리드가 행을 저장하지 않습니다. VirtualRowCount가 행 수를 알려 주고, 행이 보이는 위치로 스크롤되면 OnGetValue가 값을 반환합니다. 보이는 행만 그려지므로 백만 행 그리드도 오십 행 그리드와 같은 비용이 듭니다. 소스가 늘어나면 개수를 변경하세요.
Virtual과 VirtualRowCount, OnGetValue가 셀 값을 제공합니다OnGetValue를 통해 값을 읽습니다TailMode와 함께 쓰는 MaxRows가 키 기반 대안입니다규모와 연결
모든 사용자가 필터를 만들고 싶어 하지는 않습니다. TsgcGridAI는 price greater than 100 sort by volume descending highlight change less than 0 같은 질문을 그리드의 필터, 정렬, 행 강조로 바꾸며, AI 쿼리 바는 사용자가 질문을 입력할 자리를 제공합니다. 공급자를 지정하지 않으면 규칙 기반 파서가 네트워크도 API 키도 없이 로컬에서 답합니다. 공급자를 지정하면 어떤 LLM이든 대신 답합니다. TsgcUIAIEventProvider는 각 요청을 사용자 코드에 넘기고, TsgcUIAIChatProvider는 sgcWebSockets의 TsgcAIChat 컴포넌트를 사용합니다. 전송되는 것은 필드 카탈로그, 즉 열의 이름, 캡션, 형식, 몇 개의 샘플 값뿐이며 행은 절대 전송되지 않습니다.
TsgcVCLAIQueryBar, TsgcFMXAIQueryBar, TsgcWinFormsAIQueryBar, TsgcWpfAIQueryBar, TsgcAvaloniaAIQueryBar. 최근 질문, 추천 질문, 취소, 실행 취소를 제공합니다OnFilterRow를 통하고, 강조 표시는 ApplyToRow 서식 규칙이 됩니다Undo로 한 단계 되돌립니다LastExplanation이 적용된 내용을 알려 주며, 공급자가 실패하면 규칙 기반 파서가 답합니다TsgcHTMLAIAssistant를 쓰는 TsgcGridAIQuery를 계속 제공하며, JSON 메시지를 키별로 그리드에 쓰는 TsgcGridFeedSource_WebSocket, TsgcGridFeedSource_MQTT, TsgcGridFeedSource_SSE도 제공합니다무료 Community 에디션을 포함한 모든 에디션에서 VCL, FireMonkey, WinForms, WPF, Avalonia에서 사용할 수 있습니다. sgcWebSockets 공급자와 sgcGridWS 브리지에는 sgcWebSockets와 Registered 에디션이 필요합니다.
도움말 항목 읽기미리 보기에는 프린터와 PDF가 받는 내용이 그대로 표시됩니다.
인쇄, 미리 보기, PDF
인쇄된 페이지에는 화면이 아니라 그리드의 내용이 나옵니다. 모든 행이 필터, 정렬 순서, 그룹화, 찾기 일치를 적용한 그리드 표시 그대로 인쇄되며, 스크롤로 보이는 행만 인쇄되는 것이 아닙니다. 밴드 행과 열 머리글은 모든 페이지 맨 위에 반복되고, 요약이 있는 바닥글은 모든 페이지를 마무리하며, 한 페이지에는 온전한 행만 담기므로 행이 잘리는 일이 없습니다.
Print는 인쇄 대화 상자를 표시하거나 기본 프린터로 바로 인쇄하고, ShowPrintPreview는 페이지 이동, 확대/축소, 페이지 설정, 인쇄, PDF 내보내기를 갖춘 미리 보기를 엽니다PrintSettings는 용지, 방향, 여백, 배율, 머리글과 바닥글 텍스트를 담고 있으며, 프린터, 미리 보기, PDF가 모두 이를 사용합니다ExportToPDF는 실제 검색 가능한 텍스트를 가진 벡터 페이지를 기록합니다. 기본적으로 태그가 지정된 PDF/UA이며 모든 페이지가 머리글 셀을 가진 실제 표이므로, 화면 읽기 프로그램이 표를 머리글과 함께 안내합니다TsgcUIPDFOptions의 PDFALevel은 보관용으로 PDF/A-2a 또는 PDF/A-3a를 추가하며, 단독으로도 PDF/UA와 함께도 사용할 수 있습니다인쇄와 미리 보기는 무료 Community 에디션을 포함한 모든 에디션에서 VCL, FireMonkey, WinForms, WPF, Avalonia에서 사용할 수 있습니다. FireMonkey에서는 인쇄가 Windows와 macOS에서, 미리 보기와 PDF 내보내기는 모든 플랫폼에서 동작합니다. PDF 내보내기에는 sgcUIPDF 브리지와 라이선스가 있는 sgcPDF(.NET에서는 NuGet 패키지 esegece.sgcUICore.sgcPDF)가 필요하므로 Community 에디션에는 포함되지 않습니다.
UI Automation을 통한 화면 읽기 프로그램, 키보드, 고대비 지원, 별도 설정이 필요 없습니다.
접근성
sgcGrid는 화면 읽기 프로그램(Narrator, NVDA 등)이 사용하는 API인 Microsoft UI Automation에 열 머리글, 행, 셀이 있는 표로 내용을 노출합니다. 보이는 행만 생성되고 행과 열 개수는 항상 전체 개수이므로, 행이 백만 개인 그리드도 추가 비용이 들지 않습니다.
접근성은 무료 Community 에디션을 포함한 모든 에디션에서 기본으로 켜져 있으며, Delphi 7부터 Delphi 13까지 모든 Delphi 및 C++Builder 버전의 VCL, Windows의 FireMonkey, 그리고 WinForms, WPF, Avalonia에서 지원됩니다. Delphi와 C++Builder에서는 AccessibleName과 AccessibleDescription이 UI Automation에 노출되는 이름과 설명을 설정하고, .NET에서는 각 프레임워크의 표준 접근성 이름과 도움말 텍스트가 같은 역할을 합니다. 접근성 적합성 보고서를 참조하세요. Avalonia에는 표 패턴이 없으므로 각 셀이 이름과 도움말 텍스트에 자신의 열과 위치를 담고 있습니다. 열 너비는 마우스로만 조절할 수 있습니다.
sgcUI 제품군 데모 속의 sgcGrid: 내장 시뮬레이션 데이터로 오프라인에서 실행되는 완전한 애플리케이션입니다.
데스크와 전략별로 묶은 포지션, P&L 셀 색상 표시, 체결 내역은 한 번의 클릭으로.
Altamira Markets →
요약과 연결된 연락처 카드가 있는 지역별 고객 그룹.
Altamira ERP →
프로그램별로 묶고 대응 행이 있는 리스크 대장.
Altamira PMO →
트럭별 ETA, 여유 시간, 상태가 있는 차량 그리드와 전국 지도.
Altamira Fleet →sgcGrid QA 성능 게이트의 최근 측정 평균입니다. 열 12개, 행 100,000개, 보이는 행 45개의 1920 x 1080 프레임을 래스터 캔버스에서 60번 렌더링했습니다. 게이트는 프레임당 Win64에서 16 ms, Win32에서 25 ms를 넘으면 실패합니다.
| 측정 항목 | 결과 | 조건 |
|---|---|---|
| 일반 프레임 | 3.0 ms | Win32 |
| 일반 프레임 | 4.6 ms | Win64 |
| 일반 프레임 | 3.7 ms | Linux64 |
| 깜박임 및 서식 규칙 3개 | 3.2 ms | Win32 |
| 깜박임 및 서식 규칙 3개 | 6.8 ms | Win64 |
| LiveTicker 데모, 작업자 스레드 쓰기 | 초당 약 1,000건 업데이트 | 정렬된 깜박이는 그리드, 60 fps |
출처: 이 수치를 설명하는 도움말 항목.
호가판은 수백 개의 가격이 매초 바뀌는 중에도 읽을 수 있어야 합니다. 피드 스레드는 UpdateRow로 쓰며 UI를 기다리지 않고, 변경 시 깜박임은 모든 움직임의 방향을 보여 주며, 테일 모드는 체결 로그를 최신 체결에 맞춰 둡니다. sgcGridWS 브리지는 WebSocket, MQTT, SSE에서 호가를 읽을 수 있습니다.
주문 입력, 재고 목록, 송장 화면은 데이터베이스를 기반으로 합니다. 기존 TDataSet을 바인딩하고, 사용자가 고객이나 월별로 그룹화해 모든 그룹 행에서 합계를 보게 하고, 유효성 검사와 함께 값을 그 자리에서 수정하게 하며, 회계 담당자가 그룹과 SUBTOTAL 수식이 그대로 유지된 상태로 여는 통합 문서를 내보내세요.
운영 화면은 끝나지 않는 이벤트 스트림을 보여 줍니다. MaxRows는 로그 크기를 제한하고, 서식 규칙은 오류를 빨간색으로 표시하며, 가상 모드는 수백만 줄의 보관 데이터를 필요할 때 탐색합니다. Linux64 서버에서는 렌더러가 같은 그리드를 PNG 또는 SVG 파일로 써서 알림 이메일에 사용할 수 있습니다.
Delphi, C++ Builder, C#에서 같은 API를 사용합니다. 열을 추가하고, 키로 행을 추가하고, 나중에 어떤 스레드에서든 갱신하세요.
코드로 만든 VCL 그리드: 타입이 지정된 열, 키로 추가한 행, 어떤 스레드에서든 필드 이름으로 하는 업데이트.
uses
Forms, Classes, Controls,
sgcGrid_Columns, sgcGrid_Data, sgcGrid_VCL;
procedure CreateGrid(aForm: TForm);
var
oGrid: TsgcVCLGrid;
begin
oGrid := TsgcVCLGrid.Create(aForm);
oGrid.Parent := aForm;
oGrid.Align := alClient;
// the columns: FieldName, Caption and DataType
oGrid.Columns.Add('Symbol', 'Symbol');
oGrid.Columns.Add('Price', 'Price', gdtFloat).DisplayFormat := '0.00';
oGrid.Columns.Add('Volume', 'Volume', gdtInteger);
// one row per key, the values in column order
oGrid.Data.AppendRow('MSFT', ['MSFT', 412.5, 1200]);
oGrid.Data.AppendRow('AAPL', ['AAPL', 228.1, 3400]);
// later, from any thread: update the row of a key by field name
oGrid.Data.UpdateRow('MSFT', ['Price', 'Volume'], [413.1, 1350]);
end;생성된 sgcGrid 헤더를 사용하는 C++ Builder의 같은 그리드.
#include "sgcGrid_Columns.hpp"
#include "sgcGrid_Data.hpp"
#include "sgcGrid_VCL.hpp"
void __fastcall CreateGrid(TForm *Form)
{
TsgcVCLGrid *Grid = new TsgcVCLGrid(Form);
Grid->Parent = Form;
Grid->Align = alClient;
// the columns: FieldName, Caption and DataType
Grid->Columns->Add("Symbol", "Symbol", gdtText);
Grid->Columns->Add("Price", "Price", gdtFloat)->DisplayFormat = "0.00";
Grid->Columns->Add("Volume", "Volume", gdtInteger);
// one row per key, the values in column order
Grid->Data->AppendRow("MSFT", OPENARRAY(Variant,
(Variant("MSFT"), Variant(412.5), Variant(1200))));
Grid->Data->AppendRow("AAPL", OPENARRAY(Variant,
(Variant("AAPL"), Variant(228.1), Variant(3400))));
// later, from any thread: update the row of a key by field name
Grid->Data->UpdateRow("MSFT",
OPENARRAY(String, (String("Price"), String("Volume"))),
OPENARRAY(Variant, (Variant(413.1), Variant(1350))));
}깜박이는 셀, 마이너스 변경 규칙, 다크 테마가 있는 WinForms 그리드.
using System.Windows.Forms;
using esegece.sgcGrid;
using esegece.sgcUICore;
internal class MainForm : Form
{
private readonly TsgcWinFormsGrid Grid = new TsgcWinFormsGrid();
public MainForm()
{
Grid.Dock = DockStyle.Fill;
// the columns: field name, caption and data type
Grid.Columns.Add("symbol", "Symbol");
Grid.Columns.Add("price", "Price", TsgcGridDataType.gdtFloat).DisplayFormat = "#,##0.00";
Grid.Columns.Add("change", "Change", TsgcGridDataType.gdtFloat).DisplayFormat = "+0.00;-0.00;0.00";
Grid.Columns.Add("volume", "Volume", TsgcGridDataType.gdtInteger).DisplayFormat = "#,##0";
// changed cells flash and fade, negative rows are tinted red
Grid.FlashChanges = true;
Grid.FormatRules.Add("change", TsgcGridFormatOperator.gfoLess, "0", 0x30E53935).ApplyToRow = true;
Grid.Theme = TsgcUITheme.utDark;
// one row per key, the values follow the column order
Grid.Data.AppendRow("MSFT", "MSFT", 412.5, 0.0, 1200);
Grid.Data.AppendRow("AAPL", "AAPL", 228.1, 0.0, 3400);
Controls.Add(Grid);
}
// call it from any thread: TsgcGridData is thread safe
public void OnQuote(string aSymbol, double aPrice, double aChange, int aVolume)
{
Grid.Data.UpdateRow(aSymbol, new[] { "price", "change", "volume" },
new object[] { aPrice, aChange, aVolume });
}
}dotnet add package esegece.sgcGrid.WinFormsDelphi용 데모 15개(그중 3개는 FireMonkey), C++ Builder용 11개, WinForms, WPF, Avalonia용 .NET 데모 18개가 있습니다.
작업자 스레드에서 UpdateRow로 초당 약 1,000건의 가격 업데이트를 보내며, 정렬된 보기, 깜박이는 셀, 마이너스 변경 서식 규칙을 포함합니다. VCL, FireMonkey, C++ Builder, WinForms, WPF, Avalonia를 지원합니다.
KeyField, AutoColumns, LiveUpdates가 있는 레코드 200개의 TClientDataSet에 바인딩된 TsgcGridSource_DataSet과 JSON 및 CSV 내보내기와 가져오기를 보여 줍니다.
지역과 카테고리로 그룹화한 주문 100,000건과 그룹 패널, Count, Sum, Average 요약, 바닥글, 고정 열 2개를 보여 줍니다. .NET에서는 Grouping이라고 부릅니다.
10만 행의 판매 데이터에 깔대기 팝업, 필터 행, 찾기 패널을 적용하고, 열 선택기, 최적 너비, 파일에 저장했다가 다시 불러오는 레이아웃도 보여 줍니다. VCL, FireMonkey, C++ Builder, WinForms, WPF, Avalonia용입니다.
종목 2,000개를 Instrument, Live data, Price, Position 밴드 아래에 표시하며, 스파크라인, 진행률, 이미지 셀, 여러 행 선택, Copy 버튼을 갖추고 있습니다. VCL, C++ Builder, WinForms용입니다.
선택 목록 열, Space로 전환하는 불리언 열, 음수 수량을 거부하는 OnValidate, OnEditError, OnEdited 로그를 보여 줍니다. 여기에 sgcEditors의 날짜, 시간, 숫자, 색, 토큰 편집기, OnCreateEditor를 통한 TTrackBar, 붙여넣기, 실행 취소와 다시 실행이 더해집니다.
제품과 카테고리를 TClientDataSet 두 개에 담고, TDBNavigator와 TDBEdit 두 개가 그리드와 같은 레코드를 공유합니다. WriteBack, SyncCursor, 조회 열, 삽입, 삭제, 실행 취소를 보여 줍니다. VCL, C++ Builder, WinForms(AddLookup이 있는 DataTable)용입니다.
조직도 트리와 TsgcGridDataStore로 채운 주문 상세 영역이 있는 고객을 보여 줍니다.
SaveToXLSX로 저장하고 스프레드시트 애플리케이션에서 연 그룹 그리드와 트리 그리드로, 윤곽과 요약이 유지됩니다.
대시보드의 그리드 타일과 차트 타일: TsgcChartDataSource_Table이 그리드 행을 그립니다. sgcCharts와 sgcDashboard가 필요합니다.
TsgcGridAI와 AI 쿼리 바가 일상 언어 질문으로 종목 200개를 필터링, 정렬, 강조하며, 네트워크도 API 키도 필요 없고 TsgcGridAIQuery 브리지도 함께 보여 줍니다. sgcWebSockets가 필요합니다.
프로세스 내 WebSocket 서버가 50개 심볼의 JSON 배치를 브로드캐스트하고, TsgcGridFeedSource_WebSocket이 키별로 그리드에 씁니다. Delphi와 .NET용입니다.
무료 Community 에디션은 NuGet의 esegece.sgcGrid.Community입니다. 프로젝트는 Community 또는 등록 패키지 중 하나만 참조하며, 둘 다 참조하지는 않습니다.
| 기능 | Community (무료) | Registered 에디션 |
|---|---|---|
| Live updates from any thread, flash on change, tail mode | ✓ | ✓ |
| Format rules and themes | ✓ | ✓ |
| Sorting, filtering and selection | ✓ | ✓ |
| Grouping, group panel and summaries | ✓ | ✓ |
| Frozen columns and column resizing | ✓ | ✓ |
| Virtual mode | ✓ | ✓ |
| DataTable binding, JSON and CSV | ✓ | ✓ |
| Headless PNG and SVG | ✓ | ✓ |
| 열 필터, 필터 행, 찾기 패널 | ✓ | ✓ |
| 열 선택기, 열 이동, 최적 너비, 레이아웃 | ✓ | ✓ |
| 밴드, 이미지, 진행률, 스파크라인 셀, 다중 선택 | ✓ | ✓ |
| 그리드에 질문하기: TsgcGridAI, AI 쿼리 바, 모든 LLM 공급자 | ✓ | ✓ |
| In-place editing | − | ✓ |
| 양방향 DataTable 편집, 붙여넣기, 실행 취소와 다시 실행, sgcEditors 셀 편집기 | − | ✓ |
| Tree rows and master detail | − | ✓ |
| Excel export | − | ✓ |
| 실시간 피드, TsgcGridAIQuery, sgcWebSockets AI 공급자(sgcGridWS 및 sgcUICoreWS 브리지) | − | ✓ |
| 컴포넌트 | 대상 |
|---|---|
| TsgcVCLGrid | Delphi 및 C++ Builder, VCL (sgcGrid_VCL) |
| TsgcFMXGrid | XE6부터 Delphi FireMonkey, Windows, macOS, iOS, Android (sgcGrid_FMX) |
| TsgcGridData, TsgcGridColumns, TsgcGridFormatRules, TsgcGridLineView, TsgcGridRenderer | 프레임워크 중립 행 저장소, 열, 서식 규칙, 렌더러이며 Linux64에서도 동작 |
| TsgcGridSource_DataSet, TsgcGridDataStore | TDataSet 바인딩과 마스터 상세 영역의 행 저장소 |
| TsgcGridAI | 프레임워크 중립 일상 언어 질의 엔진이며 모든 에디션과 Linux64에서도 사용 가능 (sgcGrid_AI) |
| TsgcVCLAIQueryBar, TsgcFMXAIQueryBar, TsgcUIAIEventProvider | sgcUICore의 AI 쿼리 바와 AI 공급자, 모든 에디션 |
| TsgcUIAIChatProvider | sgcUICoreWS 브리지: sgcWebSockets의 TsgcAIChat을 AI 공급자로 사용 (Registered 에디션) |
| TsgcGridFeedSource_WebSocket, TsgcGridFeedSource_MQTT, TsgcGridFeedSource_SSE, TsgcGridAIQuery | sgcWebSockets와 함께 쓰는 sgcGridWS 브리지 (등록 에디션) |
| TsgcWinFormsGrid, TsgcWpfGrid, TsgcAvaloniaGrid | .NET, WinForms, WPF, Avalonia |
| TsgcGridAI, TsgcWinFormsAIQueryBar, TsgcWpfAIQueryBar, TsgcAvaloniaAIQueryBar | .NET, WinForms, WPF, Avalonia용 일상 언어 질의와 AI 쿼리 바 |
| 대상 | 컴포넌트 | 플랫폼 |
|---|---|---|
| Delphi 7부터 13, VCL | TsgcVCLGrid | Win32, XE2부터 Win64 |
| Delphi XE6부터 13, FireMonkey | TsgcFMXGrid | Windows, macOS, iOS, Android |
| C++ Builder 2007부터 13 | TsgcVCLGrid, TsgcFMXGrid | 생성된 .hpp 헤더와 정적 라이브러리 |
| Delphi 10.2부터 13, 프레임워크 중립 | 모델, 서식, 렌더러, JSON 및 CSV | Linux64, 예를 들어 서버에서 그리드 이미지를 렌더링 |
| .NET Framework 4.7.2, .NET 8, 9, 10 | TsgcWinFormsGrid, WPF 및 Avalonia 그리드 | WinForms, WPF, Avalonia, 헤드리스 PNG 및 SVG |
네. 그리드 데이터의 AppendRow, UpdateRow, UpdateCell, DeleteRow는 스레드 안전하므로 작업자 스레드가 키로 행을 직접 쓸 수 있습니다. 그리드는 메인 스레드에서 초당 최대 MaxFPS번 다시 그립니다. 실시간 업데이트를 확인하세요.
보이는 행만 그려지므로 프레임 비용은 행 수가 아니라 창 크기에 따라 달라집니다. QA 게이트는 행 100,000개 그리드의 1080p 프레임을 Win32에서 3.0 ms, Win64에서 4.6 ms로 측정합니다. 다른 곳에 있는 데이터에는 가상 모드가 행을 저장하지 않고 스크롤되어 보이는 값만 요청합니다. 성능을 확인하세요.
네. TsgcGridSource_DataSet은 모든 TDataSet으로 그리드를 채우고, AutoColumns로 열을 만들며, LiveUpdates를 사용하면 데이터셋의 모든 Append, Edit, Delete를 따라갑니다. KeyField가 있으면 변경된 행이 다시 불러오지 않고 제자리에서 갱신됩니다. .NET에서는 같은 소스가 DataTable을 읽습니다. DataSet 바인딩을 확인하세요.
네. TsgcVCLGrid는 일반 VCL 컨트롤이므로 기존 TStringGrid나 TDBGrid 옆의 폼에 놓을 수 있습니다. TDBGrid 화면은 데이터셋을 유지하면서 TsgcGridSource_DataSet을 추가하고, TStringGrid 화면은 AppendRow와 UpdateRow로 키별로 행을 씁니다. 기존 폼을 자동으로 변환하지는 않습니다.
인플레이스 편집, 양방향 DataTable 편집, 붙여넣기, 실행 취소와 다시 실행, sgcEditors 셀 편집기, 트리 행, 마스터 상세 행, Excel 내보내기, sgcGridWS 브리지가 없습니다. 정렬, 필터링, 필터 행과 찾기 패널, 그룹화, 요약, 고정 열, 열 선택기, 레이아웃, 밴드, 이미지, 진행률, 스파크라인 셀, 다중 선택, 서식 규칙, 가상 모드, JSON 및 CSV, 헤드리스 출력, TsgcGridAI를 사용한 그리드에 질문하기는 모든 에디션에 있습니다. 에디션을 확인하세요.
네. GroupIndent와 GroupPanelHeight 같은 크기는 장치 독립 픽셀이며, VCL 그리드는 이를 모니터의 DPI에 맞게 조정하고 Delphi 10.3부터는 모니터별로 조정합니다. Theme는 utLight와 utDark를 전환하고, AccentColor는 선택과 깜박임의 강조 색을 설정합니다.