Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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 символов


Из справки к CreateFile

Windows 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.039 c
14-1100334597
Vasya.ru
2004-11-13 11:29
2004.12.05
Вопрос про случайные числа


1-1100778694
snake1977
2004-11-18 14:51
2004.12.05
Параметры функций в DLL


6-1096625235
Avalon
2004-10-01 14:07
2004.12.05
Работа с расшаренными ресурсами


4-1098041253
Jetus
2004-10-17 23:27
2004.12.05
Как правильно сохранить иконку?


14-1100792286
_Dragon
2004-11-18 18:38
2004.12.05
курсач





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский