Форум: "Базы";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
ВнизОтобразить Memo поле в DBGrid - вариация на тему Найти похожие ветки
← →
DeepProg (2004-11-07 16:03) [0]Как это делается буквально я уже нашел.
Однако вышла заминка с реализацией.
Таблица создается динамически, а я не знаю(побочный эффект использования Object Inspector ;) ) где и как в этом случае надо писать обработчик события OnGetText (класс таблицы заново описывать что ли?).
Подробнее о ситуации:
Сама таблица объявлена просто как переменная TUdbTable(потомок TDataSet - т.е. считайте, что просто TTable). При ее формировании я просто использую AddFieldDefs. А заполнение произволжу с помощью AppendRecord
Поэтому компилятору заранее не известно, что у меня в таблице есть TMemoField - оно же не прописано статически в design-time.
Дополнительно:
В поле типа Memo должен храниться путь к директории. Такой тип выбран потому, что путь может быть довольно длинным, а длина string у используемого движка БД урезана до 255 байт.
При клике на строку в таблице должна открываться папка путь к которой хранится в описываемом поле.
Попутно возник вопрос.
Предположим, что путь превышает 8192 (или сколько там у обычной TTable) символов, а в FAQ по subj приведен код урезающий-таки строку до 255 символов. В общем, не повлияет ли изменения отображения на содержимое записи, так как используется свойство Text? (ясно, что хочется ответить RTFM!, но сроки...)
Может лучше использовать процедуру TextOut при отрисовке? (между прочим, в одном из FAQ примерно так и советовали делать, только но в ходе заполнения моей таблицы и отображения ее содержимого в Grid"e OnDrawDataCell ни разу не наступило (?..) )
← →
jack128 © (2004-11-07 17:15) [1]DeepProg (07.11.04 16:03)
Поэтому компилятору заранее не известно, что у меня в таблице есть TMemoField - оно же не прописано статически в design-timeну естественно, если ты создаешь поля в ран тайм, то в дезин тайм назначить обработчик ты не можешь.. Но что мешает сделать это ран тайм??
> ) где и как в этом случае надо писать обработчик
> события OnGetText
объявлять его методом любого класса.procedure TDBGeneratorFrame.IBDataSetNULL_RESISTANCEGetText(Sender: TField;
var Text: String; DisplayText: Boolean);
begin
inherited;
if DisplayText then
if Sender.AsInteger = 0 then
Text := "---"
else
Text := Sender.AsString;
end;
и где нить в коде
constructor TDBGeneratorFrame.Create(AOwner: TComponent);
begin
inherited;
IbDataSet.FieldByName("NULL_RESISTANCE").OnGetText := IBDataSetNULL_RESISTANCEGetText;
end;
Или можешь сделать этот обработчик методом самого TUdbTable... В общем как хочешь..
> Предположим, что путь превышает 8192 (или сколько там
> у обычной TTable) символов,
Это ограничение движка или TTable? Тогда ничего не поделаваешь..
← →
сергей1 (2004-11-07 17:29) [2]>Такой тип выбран потому, что путь может быть довольно длинным, а длина string у используемого движка БД урезана до 255 байт.
хех, длина пути к файлу в Windows не может превышать 255 символов.
Так что memo здесь непричем. Работай с обычным string
← →
jack128 © (2004-11-07 18:30) [3]сергей1 (07.11.04 17:29) [2]
хех, длина пути к файлу в Windows не может превышать 255 символов
Из справки к CreateFileWindows NT: You can use paths longer than MAX_PATH characters by calling the wide (W) version of CreateFile and prepending "\\?\" to the path.
← →
Anatoly Podgoretsky © (2004-11-07 21:06) [4]Да и без этого MAX_PATH > 255
← →
сергей1 (2004-11-07 21:17) [5]2 jack128
то, что createfilew позволяет это делать, не означает, что в базе надо с этим заморачиваться. Ты сначала найди в винде такие файлы, или попробуй их создать стандартными методами. Я вообще сомневаюсь, что к примеру проводник увидит такой файл, даже если ты его создашь.
А в топике :
>При клике на строку в таблице должна открываться папка путь к которой хранится в описываемом поле.
Я не эксперт в API, и не знаю, для каких целей используются файлы с такими длинными именами. Явно, не для каждодневного использования. Уверен, что к примеру Word такой файл не подхватит. И вообще, на эту тему надо вопрос задать в форуме по API.
2 Anatoly Podgoretsky
проводник позволяет создавать файлы с размером только меньше 255 (кажется, в районе 247).
← →
DeepProg (2004-11-08 14:38) [6]Спасибо всем за просвещение насчет длинных имен.
Однако программа действительно предполагает работу с доступными из файловых менеджеров путями, поэтому принимаю предложение Сергея.
jack128
Спасибо за прием описания обработчика in_run-time_создаваемого объекта - общий принцип примерно понятен.
← →
Val © (2004-11-08 14:56) [7]А зачем вам OnGetText? Вы содержимое мемо-поля собираетесь в сетке рисовать? Если оно длинное - зачем?- налицо неудобство. Все равно, этот путь увидит пользователь, когда откроется файловый диалог, в который вы его подставите...
По поводу присвоения обработчика - можно также воспользоваться procedure ..of object, дабы не лепить обработчик к "левому" классу, скажем.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.036 c