Описание функции


Фрагменты кода

Полезные фрагменты иногда необходимые



Сброс бинарных флагов (ссылка), не инвертировать (!), а отключить в 0.

Value & ~Flag
SetWindowLongPtr_(GadgetID(0), #GWL_STYLE, GetWindowLongPtr_(GadgetID(0), #GWL_STYLE) & (~#BS_TOP))



В функцию можно передать указатель на строку и работать с ней как со структурой, но при условии, что не будет спровоцировано увеличение длины переменной. Переменная определена снаружи и зарезервирована той областью, в которой находится.

Procedure.s TrimLeft(*a, n)
    Protected *p.string = @*a
    *p\s = Right(*p\s, Len(*p\s) - n)
EndProcedure

tmp$ = "Hello world"
TrimLeft(@tmp$, 3)
Debug tmp$



Проверить чётность/нечётность числа. Это самый быстрый способ.

n = 50
If n & 1
    Debug "Нечётное"
Else
    Debug "Чётное"
EndIf



Число с типом q может содержать 4 буквы юникода и 8 латинских букв Ascii. Доступ можно обеспечить с помощью структуры StructureUnion или функциями PeekS(), PokeS()

word.l = 'D' << 24 | 'C' << 16 | 'B' << 8 | 'A'
Debug PeekS(@word, 4, #PB_Ascii)
qword.q = 'H' << 56 | 'J' << 48 | 'F' << 40 | 'I' << 32 | 'D' << 24 | 'C' << 16 | 'B' << 8 | 'A'
Debug PeekS(@qword, 8, #PB_Ascii)
qword.q = 'Г' << 48 | 'В' << 32 | 'Б' << 16 | 'А'
Debug PeekS(@qword, 4, #PB_Unicode)



Исключаем повторный запуск программы. Здесь "prog_name459371" некая комбинация случайных символов, которая не может случайно использоваться кем-то и создать проблему запуска другой программе. Можно сгенерировать слово используя Random(255) с RandomSeed(). Основано на ошибке повторного создания семафора.

Define *a = CreateSemaphore_(#Null, 0, 1, "prog_name459371")
If *a And GetLastError_() = #ERROR_ALREADY_EXISTS
    CloseHandle_(*a)
    MessageRequester("", "Программа уже запущена")
    End
EndIf