Delphi, Asm, C, WinAPI, PHP, ..., FAQ |
Добро пожаловать, гость ( Вход | Регистрация )
Delphi, Asm, C, WinAPI, PHP, ..., FAQ |
-=CHE@TER=- |
Jan 15 2010, 19:26
Сообщение
#41
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Товарищи, объясните мне кто-нибудь такой феномен:
CODE Program bitstest; {$APPTYPE CONSOLE} Var X: Cardinal; Begin X:=123; X:=X ShR 32; // Должно быть 0... WriteLn(X); // Но остаётся 123 как и было!.. End. X ShR 32 (X >> 32) должно быть 0, т.к. X переменная 32-х разрядная. Но дело в том, что эта операция не работает! Если сделать X >> 31 - то всё ок, но 32 просто ничего не делает - X не изменяется! Сейчас даже на FASM программу написал - такой же результат. Это что за багофича такая?!.. Кстати, если на Си такое сделать, то результат не изменится, но будет предупреждение: warning: right shift count >= width of type Просто есть формула: X:=X ShR (32 - BITS); Которая при BITS = 0, должна давать 0, но из-за этого косяка получается фигня... Кто-нибудь может объяснить почему так? Я ещё понимаю, когда сдвиг больше размера типа, но когда равно - должен же 0 быть?.. Добавлено: Ну, трындец просто (взято отсюда): QUOTE most popular CPUs have only 5 bit shift counts Офигеть!!!И ещё (примерно оттуда же): QUOTE shift count from 0 up to the number of bits in the register-1 Слов нет - одни эмоции. |
Grom PE |
Jan 16 2010, 07:46
Сообщение
#42
|
Advanced Member Группа: CTPAX-X Сообщений: 84 Регистрация: 7-February 08 Из: i@grompe.org.ru Пользователь №: 3,120 Спасибо сказали: 95 раз(а) |
-=CHE@TER=-
Ну дык, процессор так работает, x shr y на самом деле x shr (y mod 32). Надо обнулить переменную, так и пиши =) Точнее, x shr (y and 11111b), что и составляет 5 бит маски. Intel Спасибо сказали:
|
-=CHE@TER=- |
Jan 23 2010, 18:35
Сообщение
#43
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Думаю, что это лучше здесь разместить, чем в ссылках:
www.strchr.com - занятный сайт про C, WinAPI, ASM. Примеры кода, оптимизации и времени которое будет затрачено на каждый вариант того или иного алгоритма. Есть исходные коды программ. |
Siberian GRemlin |
Feb 15 2010, 15:45
Сообщение
#44
|
Advanced Member Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 221 раз(а) |
Может не в тему, но есть ли готовый модуль\библиотека для работы с БД в SQLite?
|
Axsis |
Feb 15 2010, 16:10
Сообщение
#45
|
Advanced Member Группа: CTPAX-X Сообщений: 121 Регистрация: 6-February 08 Пользователь №: 374 Спасибо сказали: 149 раз(а) |
пара ссылок с первой страницы гугла:
http://www.delphi.int.ru/articles/43/ http://sqlitebrowser.sourceforge.net/ http://sqlite4delphi.sourceforge.net/ Спасибо сказали:
|
-=CHE@TER=- |
Apr 22 2010, 10:05
Сообщение
#46
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Чтобы долго не писать чего да как - приведу лог чата
Код программы: CODE program gsc3fgps; {$IFNDEF DCC32HACK}uses Windows;{$ENDIF} // http://mikhail.krivyy.com/2004/07/28/asus-l3c-led/ // http://mikhail.krivyy.com/wp/wp-content/uploads/2006/10/asusled.cpp // http://www.scintilla.utwente.nl/~timl/devicepower/v1.1/devicepower.c const ATKACPI_IOCTL_CODE = $222404; // ioctl command codes DPWR = $52575044; // Device Power list QDEV = $56454451; // Query Device SDON = $4E4F4453; // Set Device On SDOF = $464F4453; // Set Device Off type ioctl_arg = packed record dummy: word; arg_bytes: word; value: longword; end; pioctl_arg = ^ioctl_arg; ioctl_cmd = packed record ctype: longword; cmd_code: longword; has_arg: longword; arg_bytes: longword; arg: pioctl_arg; end; function CtrlACPI(ATKACPIhandle: THandle; code, hasArg, arg: longword): longbool; var iarg: ioctl_arg; icmd: ioctl_cmd; bout: longword; buff: array[0..191] of longword; begin bout := 0; iarg.dummy := 0; iarg.arg_bytes := 4; iarg.value := 2; icmd.ctype := hasArg; icmd.cmd_code := code; icmd.has_arg := arg; icmd.arg_bytes := 8 * arg; icmd.arg := pioctl_arg(longword(@iarg) * arg); result := DeviceIoControl(ATKACPIhandle, ATKACPI_IOCTL_CODE, @icmd, sizeof(icmd), @buff[0], sizeof(buff), bout, nil); end; // enable gsc3f GPS var ATKACPIhandle: THandle; begin ATKACPIhandle := CreateFile('\\.\ATKACPI', GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0); if ATKACPIhandle <> INVALID_HANDLE_VALUE then begin CtrlACPI(ATKACPIhandle, DPWR, 1, 0); CtrlACPI(ATKACPIhandle, QDEV, 2, 1); if ParamCount <> 0 then CtrlACPI(ATKACPIhandle, SDOF, 2, 1) // OFF else CtrlACPI(ATKACPIhandle, SDON, 2, 1); // ON CloseHandle(ATKACPIhandle); end; end. Спасибо сказали:
|
-=CHE@TER=- |
Jun 1 2010, 17:46
Сообщение
#47
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Иногда бывает надо при распаковке игровых архивов попутно создавать необходимые каталоги.
Например для файла: DATA\TEXTURES\ENVIRONMENT\SKY_01.TGA их нужно создать аж 3 штуки. Вот небольшие куски кода на Delphi и C для таких вещей. Обрабатываются обе косые черты. В обоих случаях идентификатор S не должен являться константой. CODE For I:=1 To Length(S) Do If ((S[I] = '\') Or (S[I] = '/')) Then Begin CreateDirectory(PChar(Copy(S, 1, I - 1)), Nil); { Delphi понимает только слэш } S[I]:='\'; End; CODE char *s; ... s = filenamepath; while(*s){ if((*s == '\\') || (*s == '/')){ *s = 0; mkdir(filenamepath); /* а C понимает только такой */ *s = '/'; } s++; } Спасибо сказали:
|
-=CHE@TER=- |
Jul 21 2010, 16:00
Сообщение
#48
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Xplorer! RasGetConnectionStatistics - это как раз в точности то, что мне нужно было! Большое, нет просто ГРОМАДНОЕ спасибо! Опять всплыл вопрос, только на этот раз хочу получить количество принятых / переданных байт для сетевой карты. RasGetConnectionStatistics() тут уже не помогает. Сделал программу через GetIfTable, но, почему-то, если не сильно активен, там обычно на полмегабайта меньше трафика, чем отображается по команде "netstat -e". Кто-нибудь знает, в чём прикол? Добавлено: А! Всё, понял - "netstat -e" показывает суммарный трафик на адаптере - т.е. сколько пришло и ушло со всех интерфейсов. А т.к. интерфейса два (+loopback), то нужно было тупо трафик суммировать. Хотя это даже удобно - если не учитывать loopback, то можно получить "чистый трафик", который уходит во внешку. Спасибо сказали:
|
-=CHE@TER=- |
Jul 27 2010, 17:38
Сообщение
#49
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Блин, ставил по работе на удалённый сайт Joomla - застрелиться. Сама CMS в архиве .tar.gz, но хостер (сюрприз!) не даёт доступ по SSH, а также запускать через PHP exec() / system() чтобы выполнить команду распаковки. В Интернете погуглил - ничего кроме использования двух упомянутых выше команд посоветовать не могут.
Короче, распаковал я Жумлу и стал копировать по FTP на сайт... 2 часа с гаком - un-freaking-believable! Скорость заливки-то большая, да вот при создании нового файла удалённый сайт почему-то тупил по несколько секунд, а в Жумле этих файлов, как снега зимой. В общем, в конце копирования я уже озверел и решил написать свою программу, которая бы соединяла файлы в один (один файл быстро заливается) и чтобы этот файл можно было потом на сервере распаковать вызвав через HTTP скрипт на PHP для распаковки. Формат файла filedump: DWORD - размер файла (size) DWORD - размер строки имени файла (nlen) CHARS - имя и путь файла (nlen байт) BYTES - содержимое файл (size байт) Повторить до конца файла. Маленькое замечание: т.к. надо было ещё и пустые каталоги на всякий случий паковать и создавать на сервере, то с именем файла такое дело - если оно заканчивается на '/' - то это каталог, нужно его создать. Файлы при паковке сортируются, так что ситуации, когда надо распаковать файл, каталога для которого ещё нет, по идее, не должны встречаться. Опционально в эти скрипты можно добавить сжатие gz (если хостер поддерживает) и дату со временем. pack.php - пакует в архив filedump всё в текущем каталоге и его подкаталогах. unpk.php - распаковывает filedump в текущий каталог. Т.к. скрипты дописал практически одновременно с окончанием копирования - проверить времени не было, но, по идее, должны работать. Кстати, там с правами под иксы может быть косяк - все файлы будут пользователю Apache принадлежать - это можно поковырять и chmod() при распаковке добавить для файлов. Код программ Спасибо сказали:
|
-=CHE@TER=- |
Aug 10 2010, 14:27
Сообщение
#50
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Вчерась ковырял одну игрушку, где данные были упакованы deflate. Как и всегда использовал puff.c + puff.h из zlib. Внезапно, при распаковке, получаю ошибку записи в память по адресу 0, программа падает. Почесав затылок извлекаю сжатый файл отдельно и делаю тестовую программку, где ничего кроме распаковки нет - не помогло. Тогда беру предыдущую (благо сохранилась - я, кстати, понял что после выхода новой версии программы, старые лучше не удалять - можно потом будет об этом сильно пожалеть) и компилирую с ней - всё работает! Написал письмо в zlib - мне товарищ Mark Adler выслал сегодня патч - применил его на последнюю версию и всё снова заработало.
Т.к. этот баг появляется редко (я уже пару программ с последней версией puff сделал и упало только здесь и то на 1 файле), то, скорее всего, обновлять файлы на сайте zlib.net будут не скоро. К тому же это не основной пакет, а дополнительный. Так что привожу инструкцию по самостоятельному патчу файла "puff.c" version 2.1, 4 Apr 2010: 1) Скачиваем Binaries Zip, распаковываем и ищем там файл "patch.exe". 2) Кидаем к нему в каталог файл "puff.c", который мы хотим пропатчить. 3) Создаём в том же каталоге текстовый файл "puff.diff" такого содержания: CODE --- ../../../zlib-1.2.5/contrib/puff/puff.c 2010-04-04 11:23:58.000000000 -0700 +++ puff.c 2010-04-25 02:04:16.000000000 -0700 @@ -525,6 +544,12 @@ int symbol; short lengths[FIXLCODES]; + /* construct lencode and distcode */ + lencode.count = lencnt; + lencode.symbol = lensym; + distcode.count = distcnt; + distcode.symbol = distsym; + /* literal/length table */ for (symbol = 0; symbol < 144; symbol++) lengths[symbol] = 8; @@ -541,12 +566,6 @@ lengths[symbol] = 5; construct(&distcode, lengths, MAXDCODES); - /* construct lencode and distcode */ - lencode.count = lencnt; - lencode.symbol = lensym; - distcode.count = distcnt; - distcode.symbol = distsym; - /* do this just once */ virgin = 0; } 4) Запускаем: patch.exe -o puff2.c puff.c puff.diff 5) Получаем исправленный файл в "puff2.c". |
Siberian GRemlin |
Jan 7 2011, 15:20
Сообщение
#51
|
Advanced Member Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 221 раз(а) |
Сегодня у меня был очередной сеанс мозгофилии.
Пример из InnoSetup (описание внешней процедуры в IS) CODE procedure MyDllFuncSetup(hWnd: Integer; lpText, lpCaption: AnsiString; uType: Cardinal); external 'MyDllFunc@files:MyDll.dll stdcall'; Пример из InnoSetup (описание процедуры в Delphi) CODE procedure MyDllFunc(hWnd: Integer; lpText, lpCaption: PAnsiChar; uType: Cardinal); stdcall; begin MessageBoxA(hWnd, lpText, lpCaption, uType); end; Меня удивила разница в типе параметров - строка и явный указатель. Проверил, работает. И действительно, на стороне DLL получаем не строку, а указатель. Далее самое главное, на стороне своей DLL я работаю с интерфейсом из другой DLL и его параметры изменить не могу, а там используется указатель на другой тип. CODE Reader.Open(PWideChar(FileName)); где FileName: String;Если работать с диалогами и брать строку (имя файла) оттуда, то всё работает. В моём же случае пришлось извратиться. CODE S:=''; for j:=0 to Length(FileName)-1 do S:=S+FileName[j]; Reader.Open(PWideChar(S)); Но это не помогло, и в итоге получаем, что якобы "нет такого файла". А также получил предупреждение (было ли оно в оригинале уже не помню) QUOTE suspicious typecast of string to pwidechar Пробовал искать в сети инфу, но либо не так запросы оформляю, либо ничего дельного там нет. Как это дело правильно преобразовать? |
-=CHE@TER=- |
Jan 7 2011, 23:20
Сообщение
#52
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
1) Либо Inno: AnsiString -> WideString; Delphi: PAnsiChar -> PWideChar
2) Либо MultiByteToWideChar в Delphi Первый вариант предпочтительнее, т.к. не будет зависеть от установленной в системе локали. |
Siberian GRemlin |
Jan 8 2011, 10:49
Сообщение
#53
|
Advanced Member Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 221 раз(а) |
Собственно, я и спрашивал как правильно перегнать PAnsiChar -> PWideChar.
Добавлено: Сделал пока так. Насчёт локалей в системе ничего не понял. Это что такое? Желательно писать или по-русски или по-английски, чтобы понять можно было, ибо винегрет плохо усваивается организмом. CODE //Обычную в юникод function StringToWideString(const s: AnsiString; codePage: Word=0): WideString; var l: integer; begin if s = '' then Result := '' else begin l := MultiByteToWideChar(codePage, MB_PRECOMPOSED, PChar(@s[1]), - 1, nil, 0); SetLength(Result, l - 1); if l > 1 then MultiByteToWideChar(CodePage, MB_PRECOMPOSED, PChar(@s[1]), - 1, PWideChar(@Result[1]), l - 1); end; end; |
-=CHE@TER=- |
Jan 8 2011, 12:35
Сообщение
#54
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Locale - это, грубо так говоря, язык установленный в системе (их, кстати, может быть сколько угодно, а не только 1 (EN) или 2 (EN, RU)). Например, если поставить чистую английскую винду, то вместо русских букв у тебя будут только знаки "?" (как и вместо букв любого другого не-английского языка).
Я не знаю (настолько серьёзно с Inno не работал) поддерживает ли он UNICODE, но без этого: 1) "C:\Игры\UT" превратится в "C:\????\UT" если в системе не установлена русская локаль. 2) Любой каталог, где в имени есть символы непредставимые в ANSI, будет содержать в имени "?". Что, естественно, работать в ANSI-программе не будет. ANSI -> UNICODE не проблема, а вот при UNICODE -> ANSI часть символов теряется (превращается в "?"). Поэтому я и написал, что лучше только с Unicode работать, если уж даже твоя библиотека её требует. Вообще, конечно, можно на этом не запариваться - вряд ли твой руссификатор какие-нибудь китайцы ставить будут. Главное, чтобы всяких хитрых символов в имени каталога назначения не было (и в имени пользователя тоже, если ты используешь временный каталог по умолчанию, а он "C:\Documents and Settings\ВасяПупкин\Local Settings\Temp\" - мы так, если помнишь, с первой версией NFSMultiConv пролетели, т.к. утилита VAG'а работала только с ANSI именами файлов). |
-=CHE@TER=- |
Jan 9 2011, 16:01
Сообщение
#55
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Ковырял тут по просьбе CMS одну. Собственно, были проблемы с отображением.
Во-первых, баннер в шапке как-то странно отваливался вниз. Причём только под IE8, под всеми остальными обозревателями, в том числе под IE6 всё было ок. Ну да не беда - всё поправилось добавлением свойства valign="top" в тег <td> где был баннер: CODE <td valign="top"><a href="http://www.example.com/"><img src="banner.jpg"></a></td> Во-вторых, почему-то у таблиц с меню и прочими вещами последняя строка с картинкой линии имеющей закруглённые края по бокам всё время на 3-4 пикселя отваливалась от таблицы. Такое убожество было только под IE (версии 6 или выше). Собственно, код последней строки: CODE <tr><td colspan="2"><img src="bottom.gif" border="0" height="5" width="200"></td></tr> Установка border у <td> и <img> показала, что зазор именно между ними. Т.е. получалось что это либо padding у <td>, либо margin у <img>. Однако установка всех возможных атрибутов: border, margin, padding у обоих этих элементов в 0 и даже несмотря на добавление !important зазор так и не убрала. Офигев от такого я поставил у <td> стиль background-image и background-repeat: no-repeat, а внутрь <td> всунул nbsp чтобы пустая таблица не схлопывалась, что, собственно, решило проблему. Но мне решение не понравилось и я решил ещё поковырять стили, тем более, что такой глюк с разметкой я часто видел и на других сайтах. Чтобы я не делал (даже valign="top" у <td>), какие бы стили не менял зазор всё равно оставался. И тут я подумал: отступ, должно быть, делает сам IE, т.к. сайт написан на xml, но некоторые элементы там не соответствуют стандарту (как видно у той же картинки в шаблоне нет "/" на конце - должно быть <img ... />). Я где-то читал, что если документ не соответствует строго формату xml, то во время парсинга IE переключается обратно в какой-то там режим совместимости чего-то с чем-то. И в нём он может отображать элементы как попало. Мне нужно было как-то вытащить элемент из того неизменяемого контейнера, который ему сделал IE. Можно было применить абсолютное позиционирование, но такой фокус это уж очень грязный хак, да и с изменяемым по ширине/высоте контентом не пройдёт. И тут меня осенило - я добавил у тега <img> свойство: CODE style="float:left;" И всё заработало! Ведь float как раз отменяет всякие там отступы и прочие вещи, что в данном случае решило проблему. |
Siberian GRemlin |
Apr 14 2011, 16:49
Сообщение
#56
|
Advanced Member Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 221 раз(а) |
Не подскажите ка можно на JavaScript вставить (гипер)текст в страничку из внешнего файла? Что-то типа include() на PHP.
|
-=CHE@TER=- |
Apr 14 2011, 18:26
Сообщение
#57
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Если тебе просто что-то надо вставить, а не файл, то можно так:
CODE var st = '<a href="http://www.google.com/">Google</a>'; var test = document.getElementById("test"); test.innerHTML = st; // содержимое элемента с id="test" будет заменено на то, что было в переменной st Если же тебе именно файл надо загрузить, то тут смотри в сторону AJAX или jQuery. Кстати, загружать что-то на JavaScript можно только с того же домена, где выполняется скрипт. Иначе политика безопасности не позволит. Т.е. JavaScript выполняемый на сайте example.com не сможет загрузить что-либо с сайта microsoft.com. Для XML (для HTML там надо, видимо, XML убрать) на java script: CODE var st = './testfile.xml'; var http_request = false; http_request = new XMLHttpRequest(); if(!http_request){ alert('XMLHTTPERROR'); return; } http_request.open("GET", st, false); http_request.send(null); st = http_request.responseText; // ответ сервера - XML документ На jQuery всё вообще в одну строчку (данный пример загружает в div с id="test" содержимое файла newpage.htm с сервера): CODE $('#test').load('./newpage.htm'); Если #test заменить на body - то будет заменено содержимое страницы. Кстати, include() в PHP используется для подключения файлов с исходными кодами. Упаси тебя боже использовать его для вывода страницы, особенно, если это не твой файл, а, скажем, скачанные данные из Интернета - вредоносный PHP код туда всунуть как два байта переслать. Насчёт же подключения в HTML я бы frame или iframe посоветовал, но их баннерорезки часто рубят. Спасибо сказали:
|
Siberian GRemlin |
Apr 15 2011, 11:12
Сообщение
#58
|
Advanced Member Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 221 раз(а) |
Мне нужно было именно на JS или jQ, ибо для AJAX нужен TomCat, а его на сервере нет, равно как и нет PHP. В сети почему-то нужную функцию найти не мог никак. Спасибо!
|
-=CHE@TER=- |
Jul 23 2011, 13:01
Сообщение
#59
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Поставил я тут новый colorer для FAR и моя тачка захлебнулась обрабатывая те PHP скрипты, которые раньше без проблем редактировались. Так что откатился я на colorer version 'freeCraze' за 08.03.2000.
Работает резко, но там косяки были с раскраской у PHP - пришлось вручную дожимать до рабочего состояния. Итак: 1) В файле: C:\Program Files\Far\Plugins\colorer\includes\net\PHP.Hrc находим строчку: CODE <Block Start="/(\<\?)/" End="/(\?\>)/" Scheme="PhpScript" Color0="PhpText" Color1="HtTag" Color2="HtTag"> меняем на: CODE <Block Start="/(\<\?(php)*)/" End="/(\?\>)/" Scheme="PhpScript" Color0="LtCyan/bkBlack" Color1="HtTag" Color2="HtTag"> 2) В файле: C:\Program Files\Far\Plugins\colorer\includes\net\PhpScript.Hrc - исправляем статичные строки (с одиночными кавычками): находим строчку: CODE <RegExp Start="/([Ll]?'..??.??.??')/" Color0="dStrings"> меняем на: CODE <RegExp Start="/('(.*?[^\'])??')/" Color0="dStrings"> - исправляем проверку регистра у ключевых слов (чтобы подсвечивались в любом варианте): находим строчку: CODE <KeyWords MatchCase="True" Color="dResWords"> меняем на: CODE <KeyWords MatchCase="False" Color="dResWords"> - подсвечиваем переменные - добавляем куда-нибудь вот такое: CODE <!-- Varibles --> <RegExp Start="/(\$[a-zA-Z0-9_]+)/" Color0="DkGray"> После всех этих изменений новый colorer уже и не нужен. (*улыбается*) |
Siberian GRemlin |
Jul 28 2011, 03:05
Сообщение
#60
|
Advanced Member Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 221 раз(а) |
Намедни столкнулся с тем что IE не понимает InnerHTML (и некоторые другие) для таблиц. Поискав, нашёл решение. Читать можно только последний абзац с кодом.
|
Упрощённая версия | Сейчас: 31st October 2024 - 07:26 |