JS+
Усиленный язык сценариев для Windows
с возможностью встраивания
в ваши приложения
О языке JS+ Справочник Скачать JS+ DLL
Контакты
СПРАВОЧНИК ПО ЯЗЫКУ JS+ Содержание

Компоненты

Компонент представляет собой обособленный программный объект, который может иметь свойства, методы и события - как собственные, так и наследуемые от родительских компонентов. Компонент также может иметь дочерние компоненты, которые могут наследовать его свойства, методы и события.
Язык 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+Руководство пользователя
Адрес этой страницы: http://jsplus.ru/MANUAL/JSPlus/Component.htm
© 2024,