У меня проблемы с пониманием того, как маркеры сцинтиллы связаны с полем.
Допустим, я хочу 3 поля. 1-й для белья (здесь нет проблем), 2-й только для маркеров стрел и 3-й только для кругов. Из документации я знаю, что мне нужно указать маржинальные маски для привязки маркера к марже, но я не понимаю, как указать маску. Я немного попробовал, но так и не получил желаемого результата. (Либо стрелки отображались на обоих полях (2-й и 3-й), либо символ не был выделен, а линия была выделена цветом). Надеюсь, что кто-то может просветить меня, как установить маржинальные маски.
/* 2nd marker margin -> only arrows */
Call(SCI_SETMARGINTYPEN, 1, SC_MARGIN_SYMBOL);
Call(SCI_SETMARGINWIDTHN, 1, 20);
Call(SCI_SETMARGINSENSITIVEN, 1, 1);
Call(SCI_SETMARGINMASKN, 1, SC_MARK_ARROW); // <=== ???
DefineMarker(1, SC_MARK_ARROW, 0xffffff, 0x0000ff);
/* 3rd marker margin -> only circles */
Call(SCI_SETMARGINTYPEN, 2, SC_MARGIN_SYMBOL);
Call(SCI_SETMARGINWIDTHN, 2, 50);
Call(SCI_SETMARGINSENSITIVEN, 2, 1);
DefineMarker(2, SC_MARK_CIRCLE, 0xffffff, 0x00ff00);
Call(SCI_SETMARGINMASKN, 2, SC_MARK_CIRCLE); // <=== ???
Call(SCI_MARKERADD, 1, 1);
Call(SCI_MARKERADD, 1, 2);
Таким образом, я получаю маркер стрелки на поле 1, но только выделенную линию и нет маркера круга для поля 2. Я был бы рад, если бы кто-то мог объяснить, как должны быть установлены маски.
Доступно 32 маркера, а числа от 0 до 24 не имеют предопределенного использования. Числа от 25 до 31 используются для складывания, но если вам это не нужно, вы также можете использовать эти числа.
Первый шаг — выбрать номер для каждого из маркеров, которые вы хотите установить: скажем, 4
для стрел и 5
для кругов (вероятно, для них должны быть определены некоторые константы).
Маска поля является 32-битным значением. Чтобы установить его, вам нужно перевернуть бит, соответствующий каждому из номеров маркеров, которые должны быть включены для этого поля:
Call(SCI_SETMARGINMASKN, 1, 1 << 4); // 2nd margin, arrow marker
Call(SCI_SETMARGINMASKN, 2, 1 << 5); // 3rd margin, circle marker
Тогда вам нужно определить сами маркеры:
DefineMarker(4, SC_MARK_ARROW, 0xffffff, 0x0000ff);
DefineMarker(5, SC_MARK_CIRCLE, 0xffffff, 0x00ff00);
Таким образом, вы можете, наконец, добавить их к определенной строке:
Call(SCI_MARKERADD, 1, 4);
Call(SCI_MARKERADD, 1, 5);