[Delphi] RichEdit - пробелмы под Win98SE при размерах текста >64K
А вот под 98-й есть ограничения. вроде как надо вручную длину увеличивать.
И не надо, говорить, что винда написнана на С++ - это неверно.
И Дельфи в качестве основного языка пользую потому, что этот разработка программ на этом языке идёт процентов на 50-70 быстрее, чем на С или С++.
по любому плюсовая часть там больше паскальной
>И Дельфи в качестве основного языка пользую потому, что этот разработка программ на этом языке идёт процентов на 50-70 быстрее, чем на С или С++.
Йо!
ЗЫ: Да. Когда тебе надо написАть программу с тремя кнопками - дельфя рулит. Шарп, правда, еще сильнее рулит... Ну так вот, а как только тебе надо сделать что-нить нетривиальное, это выливается в нечеловеческое количество гемора. Мой Сосед Ексидлер, например, часов пять иппался с дельфей на тему листбокса со статичным фоном (картинка, которая не скроллиццо вместе с текстом причем так чтобы не мигало все што твой песдетс. В результате оверрайдил и переписывал несколько функций оригинального листбокса используя сурцы. Очень забавно выглядело.
Непонятно только чем бы ему в данном случае C++ помог.
Непонятно только чем бы ему в данном случае C++ помог.
Ну типа просто если та мессага не поможет, то юноша конкретно заебется создавать компонентик (который ричедит2.0 и который гарантированно держит большие буфера) ручками. А потом еще писАть для него враппер, штоб из главной проги общаццо без особого гемора. А в плюсах - не заебся бы. А в шарпе - не понадобилось бы (а если бы понадобилось, то не заебся бы, потому что PlatformInvoke там рулит!).
конкретно заебется создавать компонентик ручками. А потом еще писАть для него враппер, штоб из главной проги общаццо без особого гемора. А в плюсах - не заебся бы.А чем в плюсах проще создавать обертки над WinAPI ?
А чем в плюсах проще создавать обертки над WinAPI ?
Во-первых, тебе не приходится лазить с высунутым языком по windows.h, winbase.h, winuser.h, windefs.h и еще десятку ашничков в поисках констант, структур и сигнатур апи-функций. Во-вторых не приходится задумывацца на полчаса о том, что дать вместо LPTCSTR. А если чувак в плюсах не рюхает, то ему будет очень плохо и неуютно. И даже я не вполне уверен, анси или уникодная эта фигня должна быть, и как это определить.
В третих и в главных: если ты пишешь на чистом винапи у тебя есть Default WndProc, которая все что нужно обработает. А у дельфи есть туева хуча внутренних мессаг и прочей херни, которые, наверное, надо будет обрабатывать отдельно. Я вот, например, плохо себе представляю, как адекватно реагировать на ресайз формы. А еще если в плюсах посыл WM_GETTEXT каждый раз когда ты хочешь получить текст из едита выглядит достаточно естественно, то в дельфе заиппешься так делать, поетому надо будет писАть адекватный враппер.
ЗЫ: Есть маза. Поискать в инете компонентик для дельфи, который умеет большой буфер под 98.
ЗЗЫ: Ффторая маза. Лезешь в сурцы VCL, пиздишь сурцы ричедита, пытаешься их подправить требуемым образом.
Во-первых, тебе не приходится лазить с высунутым языком по windows.h, winbase.h, winuser.h, windefs.h и еще десятку ашничков в поисках констант, структур и сигнатур апи-функций.действительно не приходится искать в дельфях, windows.pas и messages.pas - всего два модуля . А зачем собственно искать сигнатуры функций ? Они в написаны в хелпе. ( Windows32 SDK)
Во-вторых не приходится задумывацца на полчаса о том, что дать вместо LPTCSTR. А если чувак в плюсах не рюхает, то ему будет очень плохо и неуютно. И даже я не вполне уверен, анси или уникодная эта фигня должна быть, и как это определить.Не так много типов и как правило они продублированны с теми же названиями что и в SDK. Например заглянешь в windows.pas и увидишь :
type
LPSTR = PAnsiChar;
LPCTSTR = PAnsiChar; { should be PWideChar if UNICODE }
В третих и в главных: если ты пишешь на чистом винапи у тебя есть Default WndProc, которая все что нужно обработает. А у дельфи есть туева хуча внутренних мессаг и прочей херни, которые, наверное, надо будет обрабатывать отдельно.А что мешает в дельфях сделать WndProc и работать в традициях чистого WinAPI ?
В LMDTools вроде БЫЛ ричедит, который НЕ ГЛЮЧИТ под Win9x....
например, здесь: http://home.ural.ru/~delphi3/delp/vcl/red/reexa.htm#add
действительно не приходится искать в дельфях, windows.pas и messages.pas - всего два модуля . А зачем собственно искать сигнатуры функций ? Они в написаны в хелпе. ( Windows32 SDK)
Чисто для самообразования можешь найти в сдк мега-функцию NetShareEnum, потом ффтыкнуть в ее самый главный параметр (который под 98 пойнтит на массив share_info_50 а затем в описАнии этой самой share_info_50 увидеть клевую константу SHPWLEN. После чего поискать ее где-нить.
Лично я после этого случая забил на дельфи. Вообще. И ни разу ее с тех пор не запускал. Чего и вам советую.
ЗЫ: А вообще похуй. Фанаты дельфей на фоне VB программеров выглядят почти вменяемыми =)
typedef struct _share_info_50это не самое сложное что могло бы встретится. Я вот например при написании программы дозвона столкнулся с проблемой использования RAS Api,
{
char shi50_netname[LM20_NNLEN+1];
unsigned char shi50_type;
unsigned short shi50_flags;
char FAR* shi50_remark;
char FAR* shi50_path;
char shi50_rw_password[SHPWLEN+1];
char shi50_ro_password[SHPWLEN+1];
} _share_info_50;
но эта проблема быстро исчезла, т.к. в инете есть все API функции, которых нет по умолчанию в делфи. В моем случае это был RasApi.pas
в твоем это SvrApi.pas,
вот константа которую ну очень тяжело найти, особенно c++ программеру, продаю за 1000$
{$EXTERNALSYM SHPWLEN}
SHPWLEN = 8; // Share password length (bytes)
ЗЫ. проблема с 64К в ричэдите в справке (я имею в виду MSDN и MAPI) явно не описана.. А ошибка/ограничение явно в АПИ, а не в дельфёвых методах.
ЗЫЫ. The NetShareEnum function is obsolete. It is provided only for compatibility with LAN Manager and 16-bit versions of Windows. Win32-based applications should use the WNetEnumResource function.
Зачем пользовать устаревшие функции? Или ты писал для Win 3.1 (именно это подразумевается под 16-bit versions of Windows)
ЗЫЫЫЫ. Дельфёвый MAPI слишком убогий и по-хорошему, если опускаешься до АПИ надо пользовать MSDN.
2)GetPrivateProfileString is obsolete.
Тем не менее если ты сумеешь найти в своем окружении мега-программеров, прогающих под винду, они тебе хором все ответят, чтго более полезной функции микрософтовские программеры не придумывали ни разу.
NetShareEnum - из этой группы гораздо более продвинутые, чем WNet. Например, ты можешь легко видеть скрытые ресурсы (с $ на конце, понимаете, что я имею в виду )
а чем так полезна GetPrivateProfileString?
Попробуй RxRichEdit, мб поможет .. хотя не знаю..
попробуй указать имя компа 1016R
а чем так полезна GetPrivateProfileString?
Халявная парсилка инишек =)
в мсдн-е тебя "по-русски" сказано, чтоб ты хранил все в реестре...
а если очень хочется файл, то гораздо проще юзать xml
а нах их парсить?
в мсдн-е тебя "по-русски" сказано, чтоб ты хранил все в реестре...
а если очень хочется файл, то гораздо проще юзать xml
Ну типа было нужно именно файл. И при помощи этой мега-функции удалось заставить его работать меньше чем за минуту:
TCHAR* ReadCFG(const TCHAR *fileName,
const TCHAR *defaultvalue,
const TCHAR *group,
const TCHAR *name)
{
const int bufsize = 1024;
static TCHAR buf[bufsize];
GetPrivateProfileString (group, name, defaultvalue, buf, bufsize, fileName);
return buf;
}
А потом использовать так, например:
LevelCount = _ttoi(ReadCFG(buffer, TEXT("1" TEXT("GameSettings" TEXT("LevelCount";
Вряд ли я смог бы найти какой-нить парсер хмл и настроить его быстрее.
А еще у виндовой инишки формат проще - человекочитабельней, и генерить различные конфигурации прогой на С гораздо легче чем хмл если использовать.
и с каждой последующей версией IE обновляется..
например:
LevelCount:=S.Values['LevelCount'];
Если так уж важна разделяемость на секции - к вашим услугам TIniFile
Оставить комментарий
yolki
чем лечатся?Есть слухи, что какими-то специальными апишными функциями.