
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.52] |
![]() |
|
Сообщ.
#1
,
|
|
|
Теперь работать с текстовыми полями станет по приятней
![]() fldSetText(formid, filedid, NULL); что бы освободить память. ![]() ![]() void fldSetText(UInt16 formid, UInt16 fieldid, char* str, Boolean redraw=true) { FormType *pFrm = FrmGetFormPtr(formid); UInt16 iFld = FrmGetObjectIndex(pFrm, fieldid); FieldType *pFld = (FieldType*)FrmGetObjectPtr(pFrm, iFld); MemHandle hMem = FldGetTextHandle(pFld); FldSetTextHandle(pFld, NULL); if(hMem!=NULL) MemHandleFree(hMem); if(str==NULL) return; hMem = MemHandleNew(StrLen(str)+1); MemPtr pMem = MemHandleLock(hMem); StrCopy((char*)pMem, str); MemHandleUnlock(hMem); FldSetTextHandle(pFld, hMem); if(redraw) FldDrawField(pFld); } char* fldGetText(UInt16 formid, UInt16 fieldid) { FormType *pFrm = FrmGetFormPtr(formid); UInt16 iFld = FrmGetObjectIndex(pFrm, fieldid); FieldType *pFld = (FieldType*)FrmGetObjectPtr(pFrm, iFld); return FldGetTextPtr(pFld); } кстати, это отлично работает со всеми полями и редактируемыми и не редактируемыми и однострочными и многострочными, причем reculculate делать не нужно так используется FldSetTextHandle. formid и fieldid - это просто идентификаторы ресурсников (формы и поля) |
Сообщ.
#2
,
|
|
|
ну че ни каму не надо што ли?
|
Сообщ.
#3
,
|
|
|
Кому надо - те, думаю, забрали :-)
Кстати - в большинстве случаев параметр формы - не имеет смысла, почти всегда юзается активная форма. |
Сообщ.
#4
,
|
|
|
Цитата renton @ 21.12.04, 12:58 Кому надо - те, думаю, забрали :-) Кстати - в большинстве случаев параметр формы - не имеет смысла, почти всегда юзается активная форма. вот именно что почти..... |
Сообщ.
#5
,
|
|
|
Procenco, сделай подарок начинающим кодерам использующим си переведя вот этот код с паскаля на си.
Думаю и тебе будет интересно на него взглянуть. З.Ы.: прости я и сам бы это сделал, но беда со временем. ![]() Прикреплённый файл ![]() |
Сообщ.
#6
,
|
|
|
вышеприведенный код отрабатывается как надо. Филды меняют свое содержимое. Но после того как метод fldSetText был вызван, начинаются рандомные крешы, к примеру на методе DmRemoveRecord(MyDB, CurrentRecord);
Если метод fldSetText не вызывать, то всё работает как надо. Крешы начинаются если использовать этот метод хотя бы даже так: ![]() ![]() Char* noteText = FldGetTextPtr(fld); fldSetText(fld, noteText); да, и передаю уже сразу FieldPtr и строку. Подскажите в чем может быть проблема. Как правильно внести текст в редактируемый филд? Спасибо. |
Сообщ.
#7
,
|
|
|
Вот так работает:
FldDelete(fld, 0, FldGetTextLength(fld)); FldInsert(fld, str, StrLen(str)); |