Delphi, C++ Builder & .NET sgcUI 구성 제품

sgcToolbar, Delphi, C++ Builder & .NET용 툴바 및 상태 표시줄

어떤 UI에서도 똑같이 보이는 컨트롤 두 개로 데스크톱 애플리케이션의 뼈대를 만드세요. 버튼, 토글, 라디오 그룹, 드롭다운을 갖춘 툴바와, 작업자 스레드가 직접 업데이트할 수 있는 진행률 및 표시등 패널을 갖춘 실제 상태 표시줄입니다.

VCL, FireMonkey, WinForms, WPF, Avalonia모든 스레드에서 상태 표시줄 업데이트무료 .NET Community 에디션sgcUI Standard에 포함
버튼, 토글, 구분선, 드롭다운, 라벨, 스페이서에 설명선이 붙은 2배 크기의 EditorShell 툴바

완전한 명령 바와 상태 표시줄

라디오 그룹부터 작업자 스레드의 실시간 진행률까지, 모든 데스크톱 애플리케이션에 필요한 두 바를 위한 기능 12가지입니다.

명령

명령 바에 필요한 모든 항목을 제공하며 그룹화, 메뉴, 오버플로는 컨트롤이 처리합니다.

하나의 컨트롤에 모든 툴바 항목 종류

명령

하나의 컨트롤에 모든 툴바 항목 종류

실제 애플리케이션 툴바에는 일반 버튼, 눌린 상태를 유지하는 버튼, 메뉴가 있는 버튼, 구분선, 약간의 텍스트가 섞여 있습니다. sgcToolbar에서는 이들이 모두 같은 컬렉션의 항목 하나이며, Kind가 그리는 방식과 동작을 결정합니다. 항목은 Spacing 간격으로 왼쪽에서 오른쪽으로 배치되고 스페이서가 남은 너비를 차지하므로, 레이아웃 코드 없이 Help나 사용자 이름을 오른쪽 끝으로 밀 수 있습니다. 크기를 고정하고 싶을 때는 Width를 사용하세요. 힌트, 비활성 상태, 핫 트래킹은 모든 종류에 대해 그려집니다.

  • 명령용 tikButton, tikToggle, tikDropdown
  • tikSeparator는 가는 세로선을 그립니다
  • tikSpacer는 뒤따르는 항목을 오른쪽으로 밉니다
  • tikLabel은 바 안에 텍스트를 표시합니다
도움말 항목 읽기
코드 없이 만드는 라디오 그룹

명령

코드 없이 만드는 라디오 그룹

텍스트 정렬, 보기 모드, 그리기 도구는 전형적인 여럿 중 하나를 고르는 선택입니다. 여러 토글 항목에 같은 GroupIndex를 지정하면 라디오 그룹이 됩니다. 클릭하거나 코드에서 그중 하나의 Down을 설정하면 나머지는 해제되고, 이미 눌린 항목을 클릭해도 눌린 상태로 남으므로 항상 하나가 선택된 상태가 유지됩니다. GroupIndex가 0인 토글은 Bold나 Word wrap 같은 단순한 켜기와 끄기 스위치입니다. OnItemClick이 발생하기 전에 클릭이 Down을 뒤집으므로 핸들러는 새 상태를 읽을 수 있습니다. 그룹의 일관성을 유지하기 위해 이벤트를 연결할 필요가 없습니다.

  • GroupIndex가 0보다 크면 라디오 그룹이 됩니다
  • Down으로 코드에서 상태를 읽거나 설정합니다
  • 눌린 상태는 강조색 틴트로 그려집니다
  • 연결된 액션이 Checked를 통해 Down을 구동합니다
도움말 항목 읽기

명령

사용 중인 팝업에서 열리는 드롭다운 메뉴

확대 수준, 내보내기 형식, 최근 파일은 버튼 열 개가 아니라 버튼 아래의 메뉴에 속합니다. tikDropdown 항목은 캡션 뒤에 작은 화살표를 그리고, DropdownMenu에 지정한 팝업 메뉴를 버튼 바로 아래에 표시합니다. VCL과 FireMonkey에서는 TPopupMenu, WinForms에서는 ContextMenuStrip입니다. OnItemClick과 항목의 OnClick은 메뉴가 열리기 전에 발생하므로 먼저 항목을 채우거나 체크할 수 있습니다. 메뉴가 해제되면 바가 참조를 자동으로 지웁니다. 클릭 대상 하나, 메뉴 하나로 명령이 늘어나도 툴바는 짧게 유지됩니다.

  • DropdownMenu는 사용 중인 프레임워크의 팝업을 받습니다
  • 화살표는 캡션 뒤에 그려집니다
  • OnItemClick에서 메뉴를 채우거나 체크합니다
  • 오버플로 메뉴에서도 동작합니다
도움말 항목 읽기

명령 Registered 에디션 전용

공간에 맞지 않는 항목은 오버플로 메뉴로 이동

사용자는 창 크기를 조절하며, 마지막 버튼을 그냥 잘라 버리는 툴바는 필요한 명령을 숨깁니다. 항목이 맞지 않으면 sgcToolbar는 마지막 항목들을 오버플로 목록으로 옮기고 오른쪽 끝에 이중 화살표 버튼을 그립니다. 이 버튼을 누르면 숨겨진 항목마다 하나씩 실행 중에 만들어지는 OverflowMenu가 표시되고, 항목을 선택하면 클릭과 똑같이 동작합니다. 토글은 전환되고, OnItemClick이 발생하며, 드롭다운은 메뉴를 표시합니다. 모델이 무엇이 숨겨졌는지 알려 줍니다. 창이 다시 커지면 항목은 스스로 바로 돌아옵니다.

  • OverflowMenu는 실행 중에 자동으로 만들어집니다
  • 항목별 HasOverflow, OverflowCount, InOverflow
  • ItemAtPos는 오버플로 버튼 위의 히트를 알려 줍니다
  • SGC_TOOLBAR_ADVANCED 아래에서 컴파일됩니다

Community: 맞지 않는 항목은 잘리며 오버플로 버튼이 없습니다.

도움말 항목 읽기

명령 Registered 에디션 전용

TAction 재사용

명령이 이미 TActionList에 있다면 툴바가 이를 중복해서는 안 됩니다. 항목을 Action 속성으로 VCL 또는 FireMonkey TAction에 연결하면 액션의 Caption, Enabled, Visible, Hint, ImageIndex, Checked를 따릅니다. 항목에 OnClick 핸들러가 없다면 클릭 시 바를 ActionComponent로 하여 액션이 실행됩니다. 바는 유휴 시간에 InitiateAction을 호출하므로 비활성화된 액션은 추가 코드 없이 해당 버튼을 비활성화합니다. .NET에서 항목에는 ICommand용 Command와 CommandParameter가 있습니다. TActionList 하나로 툴바, 메인 메뉴, 내비게이션 바를 함께 구동할 수 있습니다.

  • Action은 항목을 임의의 TBasicAction에 연결합니다
  • 액션의 Checked가 토글의 Down을 구동합니다
  • 액션의 OnUpdate는 유휴 시간에 실행됩니다
  • .NET: Command와 CommandParameter

Community: 액션 대신 항목의 OnClick 또는 바의 OnItemClick을 처리하세요.

도움말 항목 읽기

상태 표시줄

스스로 레이아웃을 맞추고, 진행률과 상태를 표시하며, 모든 스레드의 업데이트를 받아들이는 상태 표시줄입니다.

스스로 레이아웃을 맞추는 상태 패널

상태 표시줄

스스로 레이아웃을 맞추는 상태 패널

줄과 열, 파일 이름, 저장 상태, 주 메시지가 모두 창의 아래쪽 가장자리를 두고 경쟁합니다. TsgcVCLStatusBar는 Panels를 왼쪽에서 오른쪽으로 세 단계에 걸쳐 배치합니다. 고정 패널은 Width를 차지하고, AutoSize 패널은 텍스트 너비를 차지하며, Spring 패널은 남은 너비를 나눠 가집니다. 주 메시지에 스프링 패널 하나를 사용하면 창 크기에 관계없이 바가 깔끔하게 유지됩니다. 가는 선이 패널을 구분하고 OnPanelClick이 어떤 패널이 클릭되었는지 알려 줍니다. 패널은 컬렉션이므로 디자인 타임에 오브젝트 인스펙터에서 추가하고 편집할 수 있습니다.

  • Alignment와 Hint를 가진 spkText 패널
  • Spring 패널은 남은 너비를 나눠 가집니다
  • AutoSize 패널은 텍스트에 맞춰집니다
  • OnPanelClick은 패널 클릭을 알려 줍니다
도움말 항목 읽기
진행률 표시줄과 상태 표시등

상태 표시줄

진행률 표시줄과 상태 표시등

오래 걸리는 작업에는 진행률 표시줄이, 실시간 연결에는 모든 것이 정상인지 알려 주는 표시등이 필요합니다. 패널은 Progress 퍼센트까지 강조색으로 채워지는 진행률 표시줄이 될 수도 있고, 색상 점 뒤에 패널 텍스트가 오는 표시등이 될 수도 있습니다. IndicatorState는 off, ok, warning, error 중 하나를 고르며, 녹색, 황색, 적색은 라이트 테마와 다크 테마에 맞게 따로 조정되어 있습니다. 데이터베이스 연결, 데이터 피드, 백그라운드 동기화의 상태를 표시하는 데 적합합니다. Progress나 IndicatorState를 설정하면 패널이 스스로 다시 그려지므로 작성할 그리기 코드가 없습니다.

  • 0부터 100까지의 Progress를 가진 spkProgress
  • IndicatorState를 가진 spkIndicator
  • sisOff, sisOk, sisWarning, sisError
  • GetIndicatorColor는 테마에 맞는 색상을 반환합니다
도움말 항목 읽기

상태 표시줄

작업자 스레드에서 상태 표시줄 업데이트

다운로드, 피드, 긴 계산은 작업자 스레드에서 실행되며, 모든 상태 업데이트를 메인 스레드로 되돌리는 일은 번거롭고 실수하기 쉽습니다. SetPanelText, SetProgress, SetIndicator는 Synchronize나 Queue 없이 어느 스레드에서든 호출할 수 있습니다. 모델이 잠금으로 값을 보호하고 값이 실제로 바뀐 경우에만 OnChange를 발생시키므로 같은 값을 반복해도 비용이 들지 않습니다. 그러면 VCL 바는 창에 메시지를 보내고 FireMonkey 바는 다시 그리기를 큐에 넣으므로 UI는 메인 스레드 밖에서 절대 건드려지지 않습니다. 패널보다 오래 사는 스레드도 안전합니다.

  • 어느 스레드에서든 SetPanelText, SetProgress, SetIndicator
  • 코드에 Synchronize나 Queue가 필요 없습니다
  • 값이 바뀌지 않으면 비용이 들지 않습니다
  • 범위를 벗어난 인덱스는 예외 없이 무시됩니다
도움말 항목 읽기

모양, 키보드, 출력

sgcUI의 나머지 제품과 일치하는 아이콘, 테마, 키보드 지원과 문서용 바 이미지를 제공합니다.

아이콘 또는 글리프 문자, 캡션은 선택 사항

모양, 키보드, 출력

아이콘 또는 글리프 문자, 캡션은 선택 사항

클릭할 수 있는 모든 항목에는 논리 픽셀 16의 아이콘 자리가 있습니다. 바의 Images 목록에서 ImageIndex의 이미지를 표시하고, 항목에 이미지가 없으면 Glyph를 표시합니다. Glyph는 이미지 목록이 전혀 필요 없는 문자 또는 짧은 기호입니다. ShowCaptions를 끄면 아이콘만 있는 컴팩트한 바가 되고 캡션은 힌트가 되므로 잃는 것이 없습니다. VCL 이미지 목록은 알파를 복원해 한 번 스트레이트 ARGB로 변환되고 목록이 바뀔 때까지 캐시되므로 마스크 목록과 32비트 목록 모두 올바르게 보입니다. 아이콘을 아직 디자인하는 중에는 둘을 자유롭게 섞어 쓰세요.

  • 이미지 목록용 Images와 ImageIndex
  • 이미지가 없을 때의 Glyph
  • 아이콘만 표시하려면 ShowCaptions를 False로
  • Delphi XE8부터 FireMonkey 이미지 목록 지원
  • 아랍어와 히브리어를 위한 오른쪽에서 왼쪽 지원: 항목이 오른쪽에서부터 배치되고, MirrorGlyph는 뒤로, 앞으로, 실행 취소, 다시 실행 같은 방향성 아이콘을 뒤집습니다
도움말 항목 읽기
라이트, 다크, 사용자 강조 색상

모양, 키보드, 출력

라이트, 다크, 사용자 강조 색상

바는 제품군의 모든 제품이 사용하는 sgcUICore 테마 토큰에서 색상을 가져오므로, sgcGrid 위에 있고 sgcNavigation 바 옆에 있는 툴바가 하나의 애플리케이션처럼 보입니다. Theme는 utLight 또는 utDark를 선택하고, AccentColor는 포커스 링, 토글의 눌린 틴트, 진행률 표시줄에 쓰이는 강조색을 바꿉니다. 핫, 눌림, 다운, 포커스, 비활성 상태는 모두 자동으로 파생됩니다. 각 바에는 자체 Theme가 있으므로 툴바와 상태 표시줄에 각각 설정하세요. 실행 중에 전환하면 두 바가 한꺼번에 다시 그려집니다.

  • Theme: utDefault(기본값, 애플리케이션 테마를 따름), utLight 또는 utDark
  • $AARRGGBB 값인 AccentColor, 0이면 테마 강조색을 유지합니다
  • 표시등 색상은 테마를 따릅니다
  • 다크 모드 토글을 위해 실행 중에 전환합니다
도움말 항목 읽기

모양, 키보드, 출력

키보드 접근과 동작하는 크기 조절 핸들

사용자가 필요로 하면 툴바를 탭 순서에 넣을 수 있습니다. TabStop을 설정하면 포커스된 버튼에 포커스 링이 나타나고, 왼쪽과 오른쪽 화살표는 활성화된 버튼 사이를 이동하며, Home과 End는 처음과 끝으로 이동하고, Enter 또는 Space로 활성화합니다. 기본값은 꺼져 있으므로 툴바가 아래의 편집기에서 포커스를 빼앗는 일은 없습니다. ClickItem은 폼 단축키 등에서 코드로 항목을 활성화합니다. 상태 표시줄에서 SizeGrip은 핸들 점을 그리며, VCL에서는 이를 끌어 크기를 조절할 수 있는 폼의 크기를 변경합니다. FireMonkey에서는 핸들이 그려지지만 폼 크기는 변경되지 않으므로, 폼의 크기를 조절할 수 없다면 SizeGrip을 꺼 두세요.

  • VCL의 TabStop, FireMonkey의 CanFocus
  • ClickItem은 코드에서 항목을 실행합니다
  • 상태 표시줄의 SizeGrip과 GripRect
  • 핸들은 크기 조절이 가능한 폼에서만 폼 크기를 변경합니다
도움말 항목 읽기

모양, 키보드, 출력

창 없이 두 바를 렌더링

매뉴얼 속 툴바 스크린샷은 릴리스마다 낡아집니다. sgcToolbar_Render의 렌더러는 창도 VCL이나 FireMonkey도 없이 TsgcToolbarModel 또는 TsgcStatusBarModel을 그리므로, 콘솔 프로그램, 테스트, 웹 서버도 같은 바를 이미지로 만들 수 있습니다. SaveToPNG와 SaveToSVG는 논리 픽셀 크기와 scale을 받으므로, scale 2에서 560x44는 선명한 1120x88 그림이 됩니다. 이 유닛은 Linux64를 포함한 모든 플랫폼에서 빌드됩니다. OnGetImage로 사용자 이미지를 전달하면 그림이 실행 중인 애플리케이션과 일치합니다.

  • SaveToPNG는 PNG 파일 또는 스트림을 씁니다
  • SaveToSVG는 같은 바를 SVG로 씁니다
  • TsgcToolbarModel과 TsgcStatusBarModel에서 동작합니다
  • OnGetImage는 헤드리스 출력에 아이콘을 제공합니다
도움말 항목 읽기

sgcToolbar 동작 보기

sgcUI 제품군 데모 속의 sgcToolbar: 내장 시뮬레이션 데이터로 오프라인에서 실행되는 완전한 애플리케이션입니다.

sgcToolbar로 개발하는 사람들

문서 및 코드 편집기

편집기에는 Bold와 Italic 토글, 정렬 라디오 그룹, Zoom 메뉴, 줄, 열, 저장 상태를 보여 주는 상태 표시줄이 필요합니다. sgcToolbar는 항목 컬렉션 하나와 패널 컬렉션 하나로 이 모든 것을 다루며 이미 사용 중인 TActionList에 연결됩니다. 창이 좁아지면 오버플로 메뉴가 모든 명령에 계속 접근할 수 있게 해 줍니다. EditorShell 데모는 TMemo를 둘러싸고 정확히 이렇게 구성되어 있습니다.

  • 항목 종류
  • 라디오 그룹
  • 오버플로 메뉴
EditorShell 데모 실행

장시간 실행 도구와 실시간 피드

가져오기 도구, 동기화 클라이언트, 모니터링 앱은 백그라운드 스레드에서 작업하며 그 상황을 보고해야 합니다. 작업자 스레드에서 SetProgress, SetIndicator, SetPanelText를 바로 호출하면 코드에 Synchronize 없이 상태 표시줄이 메인 스레드에서 다시 그려집니다. 표시등은 작업의 상태에 따라 녹색, 황색, 적색으로 바뀝니다. LiveStatus 데모는 정확히 이렇게 동작하는 다운로드를 시뮬레이션합니다.

  • 스레드 안전 업데이트
  • 진행률 패널
  • 표시등
LiveStatus 데모 실행

모든 플랫폼에서 같은 명령 바

Windows, macOS, 모바일로 배포하는 FireMonkey 애플리케이션에도 어디서나 같은 툴바가 필요합니다. TsgcFMXToolbar와 TsgcFMXStatusBar는 VCL 바와 같은 항목, 패널, 이벤트를 가지며 WinForms, WPF, Avalonia용 .NET 바도 같은 이름을 따릅니다. EditorShellFMX는 같은 항목, 오버플로 메뉴, 상태 패널을 갖춘 에디터 셸의 FireMonkey 버전입니다.

  • FireMonkey 바
  • 테마
  • 상태 패널
EditorShellFMX 데모 실행

A Toolbar and Status Bar in a Few Lines

The same API in Delphi, C++ Builder and C#: a toggle, a radio group, a dropdown, and a status bar updated from the click handler.

procedure TMainForm.CreateBars;
var
  oItem: TsgcToolbarItem;
  oPanel: TsgcStatusBarPanel;
begin
  // a toolbar with a toggle, a Left/Center radio group and a dropdown
  FToolbar := TsgcVCLToolbar.Create(Self);
  FToolbar.Parent := Self;
  FToolbar.ShowCaptions := True;
  FToolbar.ShowHint := True;
  FToolbar.OnItemClick := ToolbarItemClick;
  oItem := FToolbar.Items.Add;
  oItem.Caption := 'Save';
  oItem.Glyph := 'S';
  oItem.Hint := 'Save the document';
  FToolbar.Items.Add.Kind := tikSeparator;
  oItem := FToolbar.Items.Add;
  oItem.Kind := tikToggle;
  oItem.Caption := 'Bold';
  oItem.Glyph := 'B';
  oItem := FToolbar.Items.Add;
  oItem.Kind := tikToggle;
  oItem.GroupIndex := 1;
  oItem.Down := True;
  oItem.Caption := 'Left';
  oItem := FToolbar.Items.Add;
  oItem.Kind := tikToggle;
  oItem.GroupIndex := 1;
  oItem.Caption := 'Center';
  oItem := FToolbar.Items.Add;
  oItem.Kind := tikDropdown;
  oItem.Caption := 'Zoom';
  oItem.DropdownMenu := FZoomMenu;
  // a status bar: a spring text panel, a progress bar and an indicator
  FStatusBar := TsgcVCLStatusBar.Create(Self);
  FStatusBar.Parent := Self;
  oPanel := FStatusBar.Panels.Add;
  oPanel.Spring := True;
  oPanel.Text := 'Ready';
  FStatusBar.Panels.Add.Kind := spkProgress;
  oPanel := FStatusBar.Panels.Add;
  oPanel.Kind := spkIndicator;
  oPanel.AutoSize := True;
  oPanel.Text := 'Saved';
  oPanel.IndicatorState := sisOk;
end;

procedure TMainForm.ToolbarItemClick(Sender: TObject; aItem: TsgcToolbarItem);
begin
  // the setters are thread safe, a worker thread can call them directly
  FStatusBar.SetPanelText(0, aItem.Caption + ' clicked');
  FStatusBar.SetProgress(1, 60);
  FStatusBar.SetIndicator(2, sisWarning);
end;
#include <vcl.h>
#include <Vcl.Menus.hpp>
#include "sgcUICore_Theme.hpp"
#include "sgcToolbar_Model.hpp"
#include "sgcToolbar_VCL.hpp"

class TBarHandler : public TObject
{
public:
  TsgcVCLStatusBar *StatusBar;
  void __fastcall ItemClick(TObject *Sender, TsgcToolbarItem *aItem);
};

void __fastcall TBarHandler::ItemClick(TObject *Sender, TsgcToolbarItem *aItem)
{
  // the setters are thread safe, a worker thread can call them directly
  StatusBar->SetPanelText(0, aItem->Caption + " clicked");
  StatusBar->SetProgress(1, 60);
  StatusBar->SetIndicator(2, sisWarning);
}

void __fastcall CreateBars(TForm *Form, TBarHandler *Handler, TPopupMenu *ZoomMenu)
{
  // a toolbar with a toggle, a Left/Center radio group and a dropdown
  TsgcVCLToolbar *Toolbar = new TsgcVCLToolbar(Form);
  Toolbar->Parent = Form;
  Toolbar->ShowCaptions = true;
  Toolbar->OnItemClick = Handler->ItemClick;
  TsgcToolbarItem *Item = Toolbar->Items->Add();
  Item->Caption = "Save";
  Item->Glyph = "S";
  Item->Hint = "Save the document";
  Toolbar->Items->Add()->Kind = tikSeparator;
  Item = Toolbar->Items->Add();
  Item->Kind = tikToggle;
  Item->Caption = "Bold";
  Item = Toolbar->Items->Add();
  Item->Kind = tikToggle;
  Item->GroupIndex = 1;
  Item->Down = true;
  Item->Caption = "Left";
  Item = Toolbar->Items->Add();
  Item->Kind = tikToggle;
  Item->GroupIndex = 1;
  Item->Caption = "Center";
  Item = Toolbar->Items->Add();
  Item->Kind = tikDropdown;
  Item->Caption = "Zoom";
  Item->DropdownMenu = ZoomMenu;
  // a status bar: a spring text panel, a progress bar and an indicator
  TsgcVCLStatusBar *StatusBar = new TsgcVCLStatusBar(Form);
  StatusBar->Parent = Form;
  TsgcStatusBarPanel *Panel = StatusBar->Panels->Add();
  Panel->Spring = true;
  Panel->Text = "Ready";
  StatusBar->Panels->Add()->Kind = spkProgress;
  Panel = StatusBar->Panels->Add();
  Panel->Kind = spkIndicator;
  Panel->AutoSize = true;
  Panel->Text = "Saved";
  Panel->IndicatorState = sisOk;
  Handler->StatusBar = StatusBar;
}
using System;
using System.Windows.Forms;
using esegece.sgcToolbar;

internal class MainForm : Form
{
    private readonly TsgcWinFormsToolbar Toolbar = new TsgcWinFormsToolbar();
    private readonly TsgcWinFormsStatusBar StatusBar = new TsgcWinFormsStatusBar();

    public MainForm()
    {
        // a toolbar with a toggle, a Left/Center radio group and a dropdown
        Toolbar.ShowCaptions = true;
        Toolbar.OnItemClick = ToolbarItemClick;
        TsgcToolbarItem oItem = Toolbar.Items.Add();
        oItem.Caption = "Save";
        oItem.Glyph = "S";
        oItem.Hint = "Save the document";
        Toolbar.Items.Add().Kind = TsgcToolbarItemKind.tikSeparator;
        oItem = Toolbar.Items.Add();
        oItem.Kind = TsgcToolbarItemKind.tikToggle;
        oItem.Caption = "Bold";
        oItem = Toolbar.Items.Add();
        oItem.Kind = TsgcToolbarItemKind.tikToggle;
        oItem.GroupIndex = 1;
        oItem.Down = true;
        oItem.Caption = "Left";
        oItem = Toolbar.Items.Add();
        oItem.Kind = TsgcToolbarItemKind.tikToggle;
        oItem.GroupIndex = 1;
        oItem.Caption = "Center";
        ContextMenuStrip oZoom = new ContextMenuStrip();
        oZoom.Items.Add("100%");
        oZoom.Items.Add("200%");
        oItem = Toolbar.Items.Add();
        oItem.Kind = TsgcToolbarItemKind.tikDropdown;
        oItem.Caption = "Zoom";
        oItem.DropdownMenu = oZoom;
        // a status bar: a spring text panel, a progress bar and an indicator
        TsgcStatusBarPanel oPanel = StatusBar.Panels.Add();
        oPanel.Spring = true;
        oPanel.Text = "Ready";
        StatusBar.Panels.Add().Kind = TsgcStatusPanelKind.spkProgress;
        oPanel = StatusBar.Panels.Add();
        oPanel.Kind = TsgcStatusPanelKind.spkIndicator;
        oPanel.AutoSize = true;
        oPanel.Text = "Saved";
        oPanel.IndicatorState = TsgcStatusIndicatorState.sisOk;
        Controls.Add(Toolbar);
        Controls.Add(StatusBar);
    }

    private void ToolbarItemClick(object sender, TsgcToolbarItem aItem)
    {
        // the setters are thread safe, a worker thread can call them directly
        StatusBar.SetPanelText(0, aItem.Caption + " clicked");
        StatusBar.SetProgress(1, 60);
        StatusBar.SetIndicator(2, TsgcStatusIndicatorState.sisWarning);
    }
}
dotnet add package esegece.sgcToolbar.WinForms

sgcToolbar 데모 실행하기

EditorShell과 LiveStatus 데모는 VCL과 C++ Builder용으로, Delphi용 FireMonkey 버전과 함께 제공되며, .NET 에디션에서는 WinForms, WPF, Avalonia 프로젝트로 제공됩니다.

EditorShell

Registered 에디션 전용 EditorShell

토글, Left, Center, Right 라디오 그룹, Zoom 드롭다운, TActionList 링크, 오버플로 메뉴, 줄과 열 패널, Dark 토글을 갖춘 TMemo 편집기 셸입니다. 오버플로와 액션을 사용하므로 Registered 또는 체험판 에디션이 필요합니다.

LiveStatus

작업자 스레드가 다운로드를 시뮬레이션하며 텍스트 패널, 진행률 패널, 녹색, 황색, 적색으로 바뀌는 표시등을 갱신하고, Start와 Stop 버튼이 있습니다. Community 에디션으로 빌드됩니다.

Registered 에디션 전용 EditorShellFMX

FireMonkey TMemo를 TsgcFMXToolbar와 TsgcFMXStatusBar가 둘러싼 EditorShell 데모이며 Delphi 전용입니다. 같은 항목, 액션 링크, 오버플로 메뉴, 상태 패널을 제공합니다.

컴파일된 데모

sgcUI 제품 전체의 실행 파일을 제공하며, 설치가 필요 없습니다.

sgcUI_bin.zip 다운로드 →

sgcToolbar가 포함된 곳

sgcToolbar는 Standard부터 시작하는 모든 sgcUI 에디션에 포함되어 있으며 단독으로도 판매됩니다. 또한 All-Access 번들에도 포함되어 있습니다.

sgcToolbar 단일 패키지

€149 / 개발자, 전체 소스 코드, 1년 업데이트.

sgcToolbar 구매 → 가격 보기 →

sgcUI Standard

sgcToolbar, sgcGrid, sgcNavigation 및 sgcEditors, €380부터.

Standard 보기 →

sgcUI Professional

Standard에 sgcCharts, sgcDashboard 및 sgcGauges 추가, €529부터.

Professional 보기 →

sgcUI Enterprise

sgcUI 제품 14개 전체, €699부터.

Enterprise 보기 →

무료 Community 에디션(NuGet의 esegece.sgcToolbar.Community)에는 오버플로 메뉴와 액션 링크가 빠져 있습니다.

기능Community (무료)Registered 에디션
모든 항목 종류, 토글, 라디오 그룹, 드롭다운 메뉴✓✓
텍스트, 진행률, 표시등 패널✓✓
스레드 안전 상태 업데이트✓✓
아이콘, 글리프, 테마, 키보드, 크기 조절 핸들✓✓
헤드리스 PNG 및 SVG 출력✓✓
오버플로 메뉴−✓
액션 링크(Delphi)와 Command(.NET)−✓

지원 프레임워크 및 플랫폼

sgcToolbar의 컴포넌트

컴포넌트대상
TsgcVCLToolbar, TsgcVCLStatusBarDelphi 및 C++ Builder, VCL (sgcToolbar_VCL)
TsgcFMXToolbar, TsgcFMXStatusBarDelphi 및 C++ Builder, FireMonkey (sgcToolbar_FMX)
TsgcToolbarItem, TsgcStatusBarPanel, TsgcToolbarModel, TsgcStatusBarModel프레임워크 중립 모델 (sgcToolbar_Model)
TsgcWinFormsToolbar, TsgcWinFormsStatusBar.NET, WinForms
TsgcWpfToolbar, TsgcWpfStatusBar.NET, WPF
TsgcAvaloniaToolbar, TsgcAvaloniaStatusBar.NET, Avalonia
대상컴포넌트플랫폼
Delphi 7부터 13, VCLTsgcVCLToolbar, TsgcVCLStatusBarWin32 및 Win64
Delphi XE6부터 13, FireMonkeyTsgcFMXToolbar, TsgcFMXStatusBarWindows, macOS, iOS, Android, Linux(FMXLinux)
C++ Builder 2007부터 13VCL 및 FireMonkey 바생성된 .hpp 헤더와 정적 라이브러리
Delphi 10.2부터 13, 프레임워크 중립모델과 헤드리스 PNG 및 SVG 렌더러Linux64, 예를 들어 서버에서 툴바를 렌더링할 때
.NET Framework 4.7.2, .NET 8, 9 및 10TsgcWinFormsToolbar, WPF 및 Avalonia 바WinForms, WPF, Avalonia

자주 묻는 질문

네. SetPanelText, SetProgress, SetIndicator는 Synchronize나 Queue 없이 어느 스레드에서든 호출할 수 있습니다. 모델이 잠금으로 값을 보호하고 바는 메인 스레드에서 다시 그려집니다. 다른 모든 속성은 메인 스레드에서 설정합니다. 스레드 안전 업데이트를 참조하세요.

같은 역할을 모두 합니다. 위쪽에는 버튼, 토글, 드롭다운 버튼, 구분선, 라벨이, 아래쪽에는 텍스트 패널이 있습니다. 여기에 스페이서 항목, 진행률 및 표시등 패널, 스레드 안전 setter, 테마, 헤드리스 출력이 더해집니다. 기존 TActionList와 TPopupMenu 컴포넌트는 Action과 DropdownMenu로 연결됩니다.

오버플로 메뉴와 항목의 액션 링크이며, .NET에서는 Command와 CommandParameter에 해당합니다. Community에서는 맞지 않는 항목이 잘립니다. 스레드 안전 상태 업데이트, 진행률 및 표시등 패널, 헤드리스 출력을 포함한 다른 모든 기능은 Community에 들어 있습니다.

네. C++ Builder 2007부터 13까지는 생성된 헤더와 라이브러리를 통해 같은 VCL 및 FireMonkey 바를 사용하며, EditorShell과 LiveStatus 데모도 C++ Builder 프로젝트로 제공됩니다. 이 페이지의 코드 탭에서 같은 툴바를 Delphi, C++ Builder, C#으로 볼 수 있습니다.

네. 모든 크기는 논리 픽셀에 모니터의 배율을 곱한 값이고 아이콘 자리는 논리 픽셀 16이므로, 버튼, 글리프, 진행률 표시줄, 표시등 점이 어떤 DPI에서도 선명합니다. FireMonkey는 프레임의 장치 크기에 맞춰 이미지 목록에서 이미지를 가져옵니다.

네. TsgcToolbarModel과 TsgcStatusBarModel의 SaveToSVG와 SaveToPNG는 Delphi 10.2부터 Linux64에서도 창 없이 바를 그리므로, 빌드 단계에서 릴리스마다 매뉴얼의 그림을 다시 생성할 수 있습니다. scale 매개변수로 고DPI 화면과 인쇄용 선명한 이미지를 얻을 수 있습니다.

sgcToolbar 도움말

3,000+개발자
20+년
761+컴포넌트
30+API 통합
5플랫폼
30일 환불 보장만족하지 않으세요? 구매 후 30일 이내에 전액 환불을 요청하세요. 환불 정책 보기

오늘 sgcToolbar 체험하기

sgcUI 체험판에는 sgcToolbar와 다른 모든 sgcUI 제품이 포함되어 있습니다.