[Delphi] RichEdit - пробелмы под Win98SE при размерах текста >64K

yolki

чем лечатся?
Есть слухи, что какими-то специальными апишными функциями.

yolki

Под 2К/ХР всё нормально работает, в смысле ричедит принимает >64K текста.
А вот под 98-й есть ограничения. вроде как надо вручную длину увеличивать.
И не надо, говорить, что винда написнана на С++ - это неверно.
И Дельфи в качестве основного языка пользую потому, что этот разработка программ на этом языке идёт процентов на 50-70 быстрее, чем на С или С++.

smnikiforov

>И не надо, говорить, что винда написнана на С++ - это неверно
по любому плюсовая часть там больше паскальной
>И Дельфи в качестве основного языка пользую потому, что этот разработка программ на этом языке идёт процентов на 50-70 быстрее, чем на С или С++.
Йо!

bleyman

Спорить вредно! Ты попробовал сделать как я сказал?
ЗЫ: Да. Когда тебе надо написАть программу с тремя кнопками - дельфя рулит. Шарп, правда, еще сильнее рулит... Ну так вот, а как только тебе надо сделать что-нить нетривиальное, это выливается в нечеловеческое количество гемора. Мой Сосед Ексидлер, например, часов пять иппался с дельфей на тему листбокса со статичным фоном (картинка, которая не скроллиццо вместе с текстом причем так чтобы не мигало все што твой песдетс. В результате оверрайдил и переписывал несколько функций оригинального листбокса используя сурцы. Очень забавно выглядело.

hov77

Непонятно только чем бы ему в данном случае C++ помог.

bleyman

Непонятно только чем бы ему в данном случае C++ помог.

Ну типа просто если та мессага не поможет, то юноша конкретно заебется создавать компонентик (который ричедит2.0 и который гарантированно держит большие буфера) ручками. А потом еще писАть для него враппер, штоб из главной проги общаццо без особого гемора. А в плюсах - не заебся бы. А в шарпе - не понадобилось бы (а если бы понадобилось, то не заебся бы, потому что PlatformInvoke там рулит!).

hov77

конкретно заебется создавать компонентик ручками. А потом еще писАть для него враппер, штоб из главной проги общаццо без особого гемора. А в плюсах - не заебся бы.
А чем в плюсах проще создавать обертки над WinAPI ?

bleyman

А чем в плюсах проще создавать обертки над WinAPI ?

Во-первых, тебе не приходится лазить с высунутым языком по windows.h, winbase.h, winuser.h, windefs.h и еще десятку ашничков в поисках констант, структур и сигнатур апи-функций. Во-вторых не приходится задумывацца на полчаса о том, что дать вместо LPTCSTR. А если чувак в плюсах не рюхает, то ему будет очень плохо и неуютно. И даже я не вполне уверен, анси или уникодная эта фигня должна быть, и как это определить.
В третих и в главных: если ты пишешь на чистом винапи у тебя есть Default WndProc, которая все что нужно обработает. А у дельфи есть туева хуча внутренних мессаг и прочей херни, которые, наверное, надо будет обрабатывать отдельно. Я вот, например, плохо себе представляю, как адекватно реагировать на ресайз формы. А еще если в плюсах посыл WM_GETTEXT каждый раз когда ты хочешь получить текст из едита выглядит достаточно естественно, то в дельфе заиппешься так делать, поетому надо будет писАть адекватный враппер.
ЗЫ: Есть маза. Поискать в инете компонентик для дельфи, который умеет большой буфер под 98.
ЗЗЫ: Ффторая маза. Лезешь в сурцы VCL, пиздишь сурцы ричедита, пытаешься их подправить требуемым образом.

hov77

Во-первых, тебе не приходится лазить с высунутым языком по 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 ?

viktor954

В LMDTools вроде БЫЛ ричедит, который НЕ ГЛЮЧИТ под Win9x....

yolki

да не, я вроде родной поборол.
например, здесь: http://home.ural.ru/~delphi3/delp/vcl/red/reexa.htm#add

bleyman

действительно не приходится искать в дельфях, windows.pas и messages.pas - всего два модуля . А зачем собственно искать сигнатуры функций ? Они в написаны в хелпе. ( Windows32 SDK)

Чисто для самообразования можешь найти в сдк мега-функцию NetShareEnum, потом ффтыкнуть в ее самый главный параметр (который под 98 пойнтит на массив share_info_50 а затем в описАнии этой самой share_info_50 увидеть клевую константу SHPWLEN. После чего поискать ее где-нить.
Лично я после этого случая забил на дельфи. Вообще. И ни разу ее с тех пор не запускал. Чего и вам советую.
ЗЫ: А вообще похуй. Фанаты дельфей на фоне VB программеров выглядят почти вменяемыми =)

hov77

typedef struct _share_info_50
{
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;
это не самое сложное что могло бы встретится. Я вот например при написании программы дозвона столкнулся с проблемой использования RAS Api,
но эта проблема быстро исчезла, т.к. в инете есть все API функции, которых нет по умолчанию в делфи. В моем случае это был RasApi.pas
в твоем это SvrApi.pas,

вот константа которую ну очень тяжело найти, особенно c++ программеру, продаю за 1000$


{$EXTERNALSYM SHPWLEN}
SHPWLEN = 8; // Share password length (bytes)

yolki

ГЫ. ходилку по виндовой сетке я писал год назад и никаких проблем не встретил.. мдя..
ЗЫ. проблема с 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.

bleyman

1) В мсдн проблема ЯВНО ОПИСАНА.
2)GetPrivateProfileString is obsolete.
Тем не менее если ты сумеешь найти в своем окружении мега-программеров, прогающих под винду, они тебе хором все ответят, чтго более полезной функции микрософтовские программеры не придумывали ни разу.

tiva

NetShareEnum - из этой группы гораздо более продвинутые, чем WNet. Например, ты можешь легко видеть скрытые ресурсы (с $ на конце, понимаете, что я имею в виду )

gopnik1994

а чем так полезна GetPrivateProfileString?

Corrector

Попробуй RxRichEdit, мб поможет .. хотя не знаю..

Corrector

Меня функция NetShareEnum иногда подводила, в то время как WNetOpenEnum работает нормально
попробуй указать имя компа 1016R

bleyman

а чем так полезна GetPrivateProfileString?

Халявная парсилка инишек =)

gopnik1994

а нах их парсить?
в мсдн-е тебя "по-русски" сказано, чтоб ты хранил все в реестре...
а если очень хочется файл, то гораздо проще юзать xml

bleyman

а нах их парсить?
в мсдн-е тебя "по-русски" сказано, чтоб ты хранил все в реестре...
а если очень хочется файл, то гораздо проще юзать 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";


Вряд ли я смог бы найти какой-нить парсер хмл и настроить его быстрее.
А еще у виндовой инишки формат проще - человекочитабельней, и генерить различные конфигурации прогой на С гораздо легче чем хмл если использовать.

gopnik1994

xml парсер не ниже 3.0 стоит с виндой (раритетные версии < win98 не в счет)
и с каждой последующей версией IE обновляется..

yolki

На сей счёт в дельфях есть TStrings, который может загружаться из файла и потом использовать доступ к переменным через TStrings.Values.
например:
LevelCount:=S.Values['LevelCount'];
Если так уж важна разделяемость на секции - к вашим услугам TIniFile
Оставить комментарий
Имя или ник:
Комментарий: