| 
 |  
Компонент представляет собой обособленный программный объект, который может иметь свойства, методы и события - как собственные, так и наследуемые от родительских компонентов. Компонент
также может иметь дочерние компоненты, которые могут наследовать его свойства, методы и события. 
Язык JS+ имеет широкий набор компонентов, значительно облегчающих программирование визуального интерфейса и обработку различных видов данных. Большинство представленных компонентов являются
полными или максимально совместимыми аналогами соответствующих компонентов, имеющихся в популярных средах программирования C++ Builder и Delphi.
Ниже представлена классификация компонентов языка JS+:
 
Базовые компоненты 
Относительно простые объекты, используемые более продвинутыми компонентами, а также скриптами JS+ для упрощения программирования.
 
Визуальные компоненты 
Наиболее широкий класс компонентов, предназначенных для удобного построения классического пользовательского интерфейса.
 
Диалоговые компоненты 
Компоненты, реализующие привычное взаимодействие с пользователем в типовых ситуациях через обращение к стандартным диалогам системы Windows.
 
Системные компоненты 
Компоненты, предоставляющие доступ к различным объектам или устройствам системы Windows.
 
| 
Пример: базовый компонент TCanvas (JS+)
 | 
 |   
var dx=15,dy=15;
  // Главная форма frm=new TForm(); frm.Caption="JS+ - Компоненты";
  // Строка состояния stb=new TStatusBar(frm); stb.SimpleText=" Пример компонента TCanvas";
  // Панель pnl=new TPanel(frm); pnl.BorderStyle=bsSingle; pnl.ClientWidth =dx*35+2; pnl.ClientHeight=dy*22+2; pnl.Color=clWhite;
  // Подогнать размер формы под размер панели frm.ClientWidth =pnl.Width; frm.ClientHeight=pnl.Height+stb.Height;
  // Изображение img=new TImage(pnl); img.SetBounds(1,1,pnl.ClientWidth-2,pnl.ClientHeight-2); cnv=img.Canvas; cnv.Brush.Color=pnl.Color; cnv.FillRect(cnv.ClipRect);
  // Таймер tmr=new TTimer(frm); tmr.Interval=20; tmr.Enabled=true; tmr.OnTimer=tmr_Timer;
  frm.ShowModal();
  // Обработчик события OnTimer function tmr_Timer(tmr) {   var clr,rct=cnv.ClipRect;   var x=Math.round((rct.Width() *Math.random())/dx);   var y=Math.round((rct.Height()*Math.random())/dy);
    switch (Math.rand(10)) {     case 0: clr=clRed; break;     case 2: clr=clGreen; break;     case 4: clr=clBlue; break;     case 6: clr=clTeal; break;     case 8: clr=clFuchsia; break;     default: clr=pnl.Color;   }
    x*=dx; y*=dy;   cnv.Pen.Color=cnv.Brush.Color=clr;   cnv.Ellipse(x,y,x+dx,y+dy); } 
 
 
 
 |  
| 
Пример: визуальный компонент TPageControl (JS+)
 | 
 |   
// Главная форма frm=new TForm(); frm.Caption="JS+ - Компоненты"; frm.Width =600; frm.Height=450;
  // Строка состояния stb=new TStatusBar(frm);
  // Панель закладок pgc=new TPageControl(frm); pgc.SetBounds(10,10,frm.ClientWidth-20,stb.Top-20); pgc.OnChange=pgc_Change;
  // Список изображений pgc.Images=new TImageList(pgc); icn=new TIcon(); icn.LoadFromFile(JSPlus.HelpDir+"IMAGE\\TPageControl\\TabSheet.ico"); pgc.Images.AddIcon(icn); icn.Delete();
  // Закладки for (i=0;i<3;i++) {   tsh=new TTabSheet(pgc);   tsh.Caption="Страница "+(i+1);   tsh.ImageIndex=0;
    // Панель на закладке   pnl=new TPanel(tsh);   pnl.BorderStyle=bsSingle;   pnl.Color=clWhite;   pnl.SetBounds(2,2,tsh.ClientWidth-4,tsh.ClientHeight-4);   pnl.Caption=tsh.Caption; }
  pgc_Change(pgc);
  frm.ShowModal();
  // Обработчик события OnChange function pgc_Change(pgc) {   var tsh=pgc.Pages[pgc.ActivePageIndex];
    stb.SimpleText=" Выбрана "+tsh.Caption; } 
 
 
 
 |  
| 
Пример: диалоговый компонент TColorDialog (JS+)
 | 
 |   
// Главная форма frm=new TForm(); frm.Caption="JS+ - Компоненты"; frm.Width =450; frm.Height=300;
  // Строка состояния stb=new TStatusBar(frm); stb.SimpleText=' Нажмите кнопку "Цвет"';
  // Кнопка btn=new TButton(frm); btn.Caption="Цвет"; btn.Left=frm.ClientWidth-btn.Width-10; btn.Top =stb.Top-btn.Height-10; btn.OnClick=btn_Click;
  // Панель pnl=new TPanel(frm); pnl.BorderStyle=bsSingle; pnl.SetBounds(10,10,frm.ClientWidth-20,btn.Top-20); pnl.Color=clWhite;
  frm.ShowModal();
  // Обработчик события OnClick function btn_Click(btn) {   var dlg;
    // Диалог   with (dlg=new TColorDialog(frm)) {     Title="Выбор цвета ...";     Color=pnl.Color;     CustomColors.Add("ColorA=0000F0");// Красный     CustomColors.Add("ColorB=00F000");// Зеленый     CustomColors.Add("ColorC=F00000");// Синий     OnShow =dlg_Show;     OnClose=dlg_Close;   }
    if (dlg.Execute())     stb.SimpleText=" Выбран цвет: "+(pnl.Color=dlg.Color).toHColor();
    dlg.Delete(); }
  // Обработчик события OnShow function dlg_Show(dlg) {   stb.SimpleText=' Диалог "'+dlg.Title+'" показан'; }
  // Обработчик события OnClose function dlg_Close(dlg) {   stb.SimpleText=' Диалог "'+dlg.Title+'" закрыт'; } 
 
 
 
 |  
| 
Пример: системный компонент TClipboard (JS+)
 | 
 |   
var CF_Lst=new Array(   "CF_BITMAP",   "CF_DIB",   "CF_DIBV5",   "CF_DIF",   "CF_DSPBITMAP",   "CF_DSPENHMETAFILE",   "CF_DSPMETAFILEPICT",   "CF_DSPTEXT",   "CF_ENHMETAFILE",   "CF_HDROP",   "CF_LOCALE",   "CF_METAFILEPICT",   "CF_OEMTEXT",   "CF_OWNERDISPLAY",   "CF_PALETTE",   "CF_PENDATA",   "CF_RIFF",   "CF_SYLK",   "CF_TEXT",   "CF_TIFF",   "CF_UNICODETEXT",   "CF_WAVE" );
  // Главная форма frm=new TForm(); frm.Caption="JS+ - Компоненты"; frm.Width =525; frm.Height=375;
  // Строка состояния stb=new TStatusBar(frm); stb.SimpleText=' Нажмите любую из кнопок "Копировать"';
  // Метка текста ltx=new TLabel(frm); ltx.Caption="Текст:" ltx.Left=ltx.Top=10;
  // Текст txt=new TMemo(frm); txt.BorderStyle=bsSingle; txt.Left=ltx.Left; txt.Top =ltx.Top+ltx.Height+5; txt.Height=stb.Top-txt.Top-10;
  for (i=1;i<10;i++)   txt.Lines.Add("Строка "+i);
  // Метка изображения lim=new TLabel(frm); lim.Caption="Изображение:" lim.Top=ltx.Top;
  // Панель изображения pim=new TPanel(frm); pim.BorderStyle=bsSingle; pim.Top=txt.Top; pim.Width=pim.Height=txt.Height;
  // Изображение img=new TImage(pim); img.Align=alClient; img.LoadFromFile(JSPlus.HelpDir+"IMAGE\\TClipboard\\Image.jpg");
  img.Align=alNone; pim.ClientWidth=txt.ClientWidth=img.Width; pim.Left=lim.Left=txt.Left*2+txt.Width;
  // Метка буфера обмена lcb=new TLabel(frm); lcb.Caption="Буфер обмена:" lcb.Top =ltx.Top; lcb.Left=txt.Left+pim.Left+pim.Width;
  // Панель буфера обмена pcb=new TPanel(frm); pcb.BorderStyle=bsSingle; pcb.SetBounds(lcb.Left,txt.Top,txt.Width,txt.Height);
  // Текст буфера обмена tcb=new TMemo(pcb); tcb.Align=alClient; tcb.Visible=false;
  // Изображение буфера обмена icb=new TImage(pcb); icb.Align=alClient; icb.Visible=false;
  // Кнопки for (i=0,y=txt.Top+txt.Height+10;i<3;i++) {   btn=new TSpeedButton(frm);
    switch (i) {     case 0: btn.Name="CPY_TXT";             btn.Caption="Копировать";             btn.Hint=btn.Caption+" текст в буфер обмена";             x=txt.Left;             break;
      case 1: btn.Name="CPY_IMG";             btn.Caption="Копировать";             btn.Hint=btn.Caption+" изображение в буфер обмена";             x=pim.Left;             break;
      case 2: btn.Name="CLR_CLB";             btn.Caption="Очистить";             btn.Hint=btn.Caption+" буфер обмена";             x=pcb.Left;   }
    bmp=new TBitmap();   bmp.LoadFromFile(JSPlus.HelpDir+"IMAGE\\TClipboard\\"+i+".bmp");   btn.Glyph=bmp;   btn.Spacing=5;   btn.Width =bmp.Width+frm.TextWidth(btn.Caption)+btn.Spacing+20;   btn.Height=bmp.Height+20;   btn.Left=x+(txt.Width-btn.Width)/2;   btn.Top =y;   btn.ShowHint=true;   btn.OnClick=btn_Click; }
  frm.ClientWidth=txt.Left+pcb.Left+pcb.Width; frm.ClientHeight=btn.Top+btn.Height+10+stb.Height;
  // Буфер обмена clb=Clipboard();
  txt.SetFocus(); frm.ShowModal();
  function clb_Update() {   var stb_Str=" Форматы в буфере обмена:",frm_Str;
    if (clb.HasFormat(CF_TEXT)) {     tcb.Text=clb.AsText;     icb.Visible=false;     tcb.Visible=true;   }
    if (clb.HasFormat(CF_BITMAP)) {     icb.Picture.Bitmap.Assign(clb);     tcb.Visible=false;     icb.Visible=true;   }
    for (i=0,frm_Str="";i<clb.FormatCount;i++)     for (j=0;j<CF_Lst.length;j++)       if (clb.Formats[i]==eval(CF_Lst[j])) {         frm_Str+=" "+CF_Lst[j];         break;       }
    stb.SimpleText=stb_Str+((frm_Str=="") ? " нет" : frm_Str); }
  // Обработчик события OnClick function btn_Click(btn) {   switch (btn.Name) {     case "CPY_TXT": if (txt.Text!="") {                       clb.Clear();                       clb.AsText=txt.Text;                     }                     break;
      case "CPY_IMG": clb.Clear();                     clb.Assign(img.Picture.Bitmap);                     break;
      case "CLR_CLB": clb.Clear();                     tcb.Visible=icb.Visible=false;   }
    clb_Update(); } 
 
 
 
 |   
Совместимость
JS+, C++ Builder/Delphi
 
 
 |  
| JS+ | Руководство пользователя
 |   
 |   
 |