Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подскажите пожалуйста! Как в DBgrid в title картинку вставить [D6]


Rosik ©   (2004-04-10 22:32:00) 

Как вставить какую нибудь картинку в заголовок DBGrida, в фиксированную область. Типа стрелочки (галочки) при фильтровании данных,
дабы показать юзеру что отсортировано именно по этому столбцу.

Если можно, без использовния всяких крутых компонентов. Может есть у кого идеи?
Спасибо.


SergP   (2004-04-11 13:58:00) [1]

Вот блин,

var
order:string; - это в моей проге переменная , она тебе не нужна, выкинь нафиг...А то я когда постил, и вырезал все лишнее, то про это забыл...


SergP   (2004-04-11 13:51:00) [2]

Кстати:
Я вот только что попробовал делать так, чтобы не усложнять ничего:
var
 ...
 GridPicture:record
     image:byte;
     column:byte;
 end;
...

procedure TFormUsers.DBGrid1TitleClick(Column: TColumn);
var
 order:string;
begin
 GridPicture.column:=column.ID;
...
end;

...
procedure TFormUsers.DBGrid1DrawColumnCell(Sender: TObject;
 const Rect: TRect; DataCol: Integer; Column: TColumn;
 State: TGridDrawState);
begin
...

if (rect.top<20) and (GridPicture.column=DataCol) then
ImageList1.Draw(TDBGrid(Sender).Canvas,Rect.Left,0, gridpicture.image );
end;

Т.е. при перерисовке таблицы, заодно и рисую картинку в заголовке,
правда чтобы рисунок не рисовался на одном и том же месте столько раз сколько записей отображается, я поставил это условие: rect.top<20 (на глаз)
В принципе работает нормально (Для DBGrid со размерами высот строк по умолчанию)


SergP   (2004-04-11 12:10:00) [3]

А если в DBGrid отключить показ заголовков, а вместо них прилепить сверху несколько BitBtn? проблема будет если столбцы нужны не с фиксироваными, а с изменяющимися размерами...

>sniknik ©   (10.04.04 23:21)
>переопределить в гриде функцию рисования
> TMyDBGrid = class(TDBGrid)
>    procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState:
>TGridDrawState); override;
> end;
>и рисовать в ней. использовать естественно уже TMyDBGrid вместо TDBGrid.

Немного неудобно тем что наверное объект класса TMyDBGrid придется создавать в Runtime.


atruhin   (2004-04-11 09:29:00) [4]

В (3) sniknik предложил самое простое решение. Ничего сложного 10 строк кода в DrawCell. Изображения храни в ImageList. Всё просто.
Где-то была статья работа с DBGrid или что-то подобное (помоему на королевстве делфи) там всё это с примерами.


Rosik   (2004-04-11 00:25:00) [5]

THeaderControl панацея!!!!


Rosik   (2004-04-10 23:44:00) [6]

нда, спасение утопающего дело его собственное ... :)
разбираться времени мало, все равно спасибо


sniknik   (2004-04-10 23:27:00) [7]

лутше сделай сам (а то вот попадеш в такое место как я работать, запрешены все сторонние компоненты (почти, но согласовывать заколебешся), что делать будеш?)


Rosik   (2004-04-10 23:24:00) [8]

Я тоже видел, то это обкакали и сказали используй готовый компонент


sniknik   (2004-04-10 23:22:00) [9]

> + надо чтоб при нажатии на Title он как кнопка нажимался.
тогда уж проще заголовок гриду заменить (на королевстве гдето видел описание как делается)


sniknik   (2004-04-10 23:21:00) [10]

переопределить в гриде функцию рисования
 TMyDBGrid = class(TDBGrid)
    procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override;
 end;
и рисовать в ней. использовать естественно уже TMyDBGrid вместо TDBGrid.


Rosik   (2004-04-10 23:19:00) [11]

т.е DafaultDrawing в false
Я думал, геморно. может есть что то проще или кусок у кого работающий. Писать надо. А как хранить картинку, вернее 2 картинки? Наверно моно использовать файл ресурсов, но как с ними работать я не знаю :)

+ надо чтоб при нажатии на Title он как кнопка нажимался.

Я нашел такой компонент PNG_DBGrid но он без исходников, не хотелось бы использовать, Уже у него залипон один нашел.


Gott   (2004-04-10 22:54:00) [12]

Можно попробовать отлавливать событие перерисовки таблицы, и сначала рисовать картиночку в заголовке, а потом вызывать наследованную перерисовку, или попробовать найти событие перерисовки заголовка.


Наверх

Титульная страница Поиск, карта сайта Написать письмо