| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > В DBGrid'е не отображаются |
| Автор: MistMan 9.4.2004, 15:11 |
| Есть БД Paradox с картинками в BLOB'ах, я хочу чтоб они отображались в DBGrid'е, а то в ячейках пишется Graphiks. |
| Автор: Maverick 9.4.2004, 15:27 |
| Предлагаю использовать сторонний компонент dxDBGrid, обычный таких вещей не позволяет.... Поищи по форуму, где скачать - ссылки есть.... Если не хочешь сторонних, то, по-моему, единственный вариант - расположить рядом с DBGrid компонент DBImage, в котором отображать эти самые картинки.... |
| Автор: x77 9.4.2004, 15:59 |
| ну, не совсем. можно перехватывать OnDrawCell. конечно, рисовать в ячейке в 17 пикселов высотой никому не интересно, но это тоже решается через взлом класса: type TFake = class (TCustomGrid); ... TFake (DbGrid1).DefaultRowHeight := 64; типа того. короче, можно. если протрезвею к вечеру, то скину код |
| Автор: MistMan 11.4.2004, 09:38 |
| Maverick А где его можно скачать, подскажи пожалуйста |
| Автор: MistMan 11.4.2004, 11:46 |
| x77 скинь плизз, очень нужно, если не затруднит с пояснениями, т.к. я не являюсь монстром программирования. а мне еще придется защищать работу |
| Автор: Unregistered 13.4.2004, 07:58 |
| Да все рисуется в обычном дбгриде. Обрабатывай OnDrawCell. Blob-ы содержат обычные бмп-шки (хотя может и что угодно |
| Автор: x77 13.4.2004, 14:49 | ||
| MistMan, сорри за задержку, работа. я тебе полный текст модуля приведу:
обработчиков всего два, комментарии, я думаю, излишни Добавлено @ 14:57 пояснять, наверное, стоит только момент с TFake = class (TCustomGrid). детальное описание сего действа можно найти у Марко Кэнту, по-моему, в Delphi Developer's Handbook. смысл в том, что в DbGrid'е, например, скрыты поля типа DefaultColWidth, DefaultRowHeight и пр., объявленные в TCustomGrid. но концепция ООП не позволяет понизить видимость поля в наследниках. для этого их объявляют в protected - разделе. в наследниках те, которые должны быть видимы, переобъявляются в public или в published, а все остальные оказываются как бы скрытыми. но на самом деле они по прежнему видны, и до них можно добраться вышеприведённым способом. с лёгкой руки Марко Кэнту этот способ называется "взломом класса", и суть его в том, что он позволяет в компонентах-наследниках добраться до свойств, которые в их предках были объявлены, как protected. |
| Автор: Maverick 13.4.2004, 15:00 |
| Ссылки на форуме действительно не работают.... У меня есть версия - 9 мегабайт занимает.... Как перекинуть? на мыло? Он все это делает сам - и высоту, и картинку.... Тож извини за тормоза - после правильного замечания x77 немного потерял интерес к топику.... |
| Автор: x77 13.4.2004, 15:13 |
| ещё, наверное, немного странно выглядит bmp.Assign (Table1.FieldByName ('...')); в форумах обычно приводятся многоэтажные примеры с чтением в потоки, хорошо ещё, если без создания оных. здесь дело в том, что для каждого поля его значение возвращается по умолчанию. т.е. объявление Table1.FieldByName ('asd').Value, в общем-то, эквивалентно Table1 ['asd']. на практике это использовать не рекомендуется, т.к. никто не гарантирует, что вариант будет правильно преобразован. поле, содержащее графику, при инициализации получает DataType = ftGraphic. Соответственно, при вызове Assign (а реально - TPersistent.Assign) будет осуществляться копирование в зависимости от типа данных. а эти данные у нас равны Table1.FieldByName ('Graphic').Value, т.е., битмапу. решительно не знаю, что ещё тут можно пояснять |
| Автор: Unregistered 14.4.2004, 01:48 |
| Порылся у себы в исходниках и хочу немного добавить. Следующий код: НЕ РАБОТАЕТ: procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var bmp:TBitmap; str:Tstream; begin if Column.Index=7 then begin With TDBGrid(Sender) do begin bmp:=Tbitmap.Create; str:=DataSource.DataSet.CreateBlobStream(Column.Field,bmRead); bmp.LoadFromStream(str) ; Canvas.StretchDraw(Rect,bmp); bmp.Free; str.Free; end; end; end; получаю "BitMap image is not valid" таблица animals из DBDEMOS Через Assign - вопросов нет. (кстати, у меня код тоже взят у Марко Кэнту "Дельфи 4 для профессионалов") Ну а через TStream? Что не так? Преобразование? У меня есть парадокс-база в которой картинки храняться в формате JPG и там этот код работает, если, конечно, вместо TBitMap указать TJpegImage Поясните |
| Автор: MistMan 14.4.2004, 10:01 |
| Спасибо x77 , в принципе все понятно. Maverick мое мыло [email protected] пришли пожалуйста. Если будете в Майкопе заходите в гост, в долгу не останусь |
| Автор: x77 14.4.2004, 12:02 |
| MistMan, ух ты, я 10 лет в Армавире жил, там до сих пор родители и дочка. где-то через полгода поеду в ваши края. сбрось координаты на мыло, [email protected], чем чёрт не шутит |
| Автор: MistMan 15.4.2004, 13:54 |
| x77 Какого фига появляется ошибка: Incopatibles types 'TDrawGridState' and 'Enumeration' (типа того) можт я чего не то делаю? |
| Автор: Maverick 15.4.2004, 14:16 |
| MistMan Я вчера полдня пытался закачать это дело хоть куда-нибудь в нете.... Не получилось... Компонент называется DevExpress Quantum Grid, Производитель - Developer Express Inc.... Кто-нибудь подскажет как передать zip-файл в 8 мб на форум? |
| Автор: MistMan 16.4.2004, 10:52 |
| Кто-нибудь может подсказать где даунлоад на этой странице http://www.delphixjs.com/Soft_Show.asp?SoftID=518 |
| Автор: Maverick 16.4.2004, 11:21 |
| Хе... Круто.... Так как же закачать? У меня ICQ блокирован админами, даже FTP-протокол тоже.... что еще есть такое, через что перегнать можно? |
| Автор: MistMan 16.4.2004, 11:36 |
| Maverick А почтой?.. |
| Автор: x77 16.4.2004, 13:14 |
| MistMan, сорри, не был вчера на работе. покажи строчку, на которой среда этот матюг выдаёт. |
| Автор: Maverick 16.4.2004, 13:23 | ||
Почтой обрывается почему-то посередине.... Я много раз мучил, наверно, слишком крупно для почтовика.... 8мб.... |
| Автор: x77 16.4.2004, 13:50 |
| Maverick, открой ящик на хотбоксе. объём письма - до 15 метров. |