Ins_Editor

(     NumWind : Byte;
      NumObj  : Word;
      X1, Y1  : Byte;
      X2, Y2  : Byte;
      Attr    : Word;
      SizeBuf : Word;
  dim StrArr        )

Vložení objektu 'NumObj', který umožňuje editaci textu do okna 'NumWind'. Atribut 'Attr' definuje chování objektu. Dvojice čísel [X1, Y1] a [X2, Y2] tvoří souřadnice objektu. Parametr 'SizeBuf' definuje velikost vnitřní pracovní paměti editoru. Maximální velikost je $4000 bytů. Řádky v textovém editoru jsou od sebe odděleny znaky CR (13) a LF (10). Protože s tímto obecným polem znaků by se v makrojazyce pracovalo pouze velmi obtížně, provádí Ins_Editor konverzi jednorozměrného pole String  nebo StringZ 'StrArr' do tvaru, kde jsou řádky od sebe odděleny CR a LF. Konverze se provede při použití procedury SetData nebo SetDataObj. Zpětná konverze do pole řetězců se provede při použití procedury GetData nebo GetDataObj .

Před konverzí se celé pole řetězců vynuluje!

Datový obraz objektu je LongInt : Řádky | Sloupce

Nastavení dat objektu: Řádky * $10000 + Sloupce
Přečtení dat objektu: Řádky := LI div $FFFF; < BR>                                     Sloupce := LI land $FFFF;

Pozor! Aby se provedla konverze vnitřního pracovního pole editoru do jednorozměrného pole řetězců, je nutno při použití GetData nebo GetDataObj uvést proměnnou a nikoli konstantu.

Příklad:

    dim Arr (100) : String[100]; { nebo StringZ }
    dim LI        : LongInt;
    if LI = 0 then
        { Poprvé bude kurzor umístěn na řádku 2 a sloupci 5 }
        LI := _Shl(2, 16) + 5;
    endif
    Arr[1] := "Test editoru";
    Arr[2] := "------------";
    WInit(10, 0,0,40,18, "", winMove, 0);
    Ins_Editor(10, 10, 1,1,41,15, 1, $2000, Arr);
    Ins_Button(10, 20, 2,17,22,19, "OK", cmOK, 1)
    SelObject(10, 10)
    SetData(10, LI)
    WOpen(10)
    if _Execute(10) = cmOK then
        GetData(10, LI)
        _("Line:", _Shr(LI, 16), " X:",LI land $FFFF)
    endif
    WDone(10)