Главная страница
    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.034 c
1-1100702009
AlexxGold
2004-11-17 17:33
2004.12.05
Перевод ресурсов делфи


4-1098254440
sergeii
2004-10-20 10:40
2004.12.05
Vozmozhno li naiti v ToolBar-e Knopki


4-1098287307
korfu
2004-10-20 19:48
2004.12.05
передача строки в ActiveX-приложение


1-1100954265
xkiller
2004-11-20 15:37
2004.12.05
Когда PopupMenu раскрыто то OnMouseMove и OnMouseEnter неработают


14-1100421865
[NIKEL]
2004-11-14 11:44
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский