|
Компонент представляет собой обособленный программный объект, который может иметь свойства, методы и события - как собственные, так и наследуемые от родительских компонентов. Компонент
также может иметь дочерние компоненты, которые могут наследовать его свойства, методы и события.
Язык 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+ | Руководство пользователя
|
|
|