![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите пожалуйста! Как в 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]Можно попробовать отлавливать событие перерисовки таблицы, и сначала рисовать картиночку в заголовке, а потом вызывать наследованную перерисовку, или попробовать найти событие перерисовки заголовка.