powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DBGrid: Title как Button
9 сообщений из 9, страница 1 из 1
DBGrid: Title как Button
    #32084978
rock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Delphi7.
Подскажите, как заставить Title DBGrid'a вести себя как Button, то есть таким образом чтобы я мог обрабатывать события нажатия разных колонок и рисовать значок сортировки. Много перерыл информации, но нигде нет точного ответа, только готовые компоненты. Наткнулся правда на одно решение заменить Title HeaderControl'ом, но уж больно оно кривое. Смотрел исходники RXLib (RXDBCtrl.pas), но мне как неискушенному не удалось разобраться. Описано очень много методов. Если полное решение описать не представляется возможным буду благодарен за перечисление какие методы, процедуры и параметры в указанном модуле отвечают на событие OnTitleBtnClick.
...
Рейтинг: 0 / 0
DBGrid: Title как Button
    #32085027
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Поищи в инете по слову "KULIBA", скачай и посмотри - там это есть.
И вообще там есть ответы на 99% вопросов этого форума (Delphi).
...
Рейтинг: 0 / 0
DBGrid: Title как Button
    #32085052
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тигра спит наверное :)
ну что ж, отвечу за него - посмотри компоненты EhLib там в DbGrid всё это есть - события OnTitleBtnClick, свойство TitleImages и т.д...
...
Рейтинг: 0 / 0
DBGrid: Title как Button
    #32085055
rock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2eNose
Кулиба у меня конечно есть, но описание данного вопроса там отсутсвует. Как я написал выше, там есть вариант замены Title HeaderControl'ом, но он кривой.

2hDrummer
Если было бы все так легко... Там описаны тысячи процедур и методов. У меня опыт написания компонент нулевой, разобраться тяжело с нахрапу без элементарных объяснений.
...
Рейтинг: 0 / 0
DBGrid: Title как Button
    #32085057
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну волков бояться - в лес не ходить...это раз
а во-вторых не тысяча а всего 2 (два) - одно свойство и одно событие.

или тебе оно так надо, что ты даже разобраться не хочешь?
...
Рейтинг: 0 / 0
DBGrid: Title как Button
    #32085101
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже не сплю :)

Да, EhLib - самая лучшая библиотека DB-контролов, на мой взгляд
В свойствах колонки грида поставь Title.TitleButton = True, на событии грида TitleBtnClick сделай так (привожу свою процедуру, как датасет у тебя сортируется - так и переделай):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
procedure TNormGridForm.GridTitleBtnClick(Sender: TObject; ACol: Integer;   Column: TColumnEh);
var
  FieldName : String;
  i : Integer;
begin
  for i :=  0  to Grid.Columns.Count -  1  do
  begin
    if Grid.Columns[i].Title.TitleButton then
      if Grid.Columns[i].ID = Column.ID then
      begin
        if (Grid.Columns[i].Title.SortMarker in [smNoneEh, smUpEh])
         then
         begin
            Grid.Columns[i].Title.SortMarker := smDownEh;
            Query.SortOptions := [coDescending,coCaseInsensitive];
         end
         else
         begin
           Grid.Columns[i].Title.SortMarker := smUpEh;
           Query.SortOptions := [coCaseInsensitive];
         end;
         Query.SortFields := Grid.Columns[i].FieldName;
      end
      else
        Grid.Columns[i].Title.SortMarker := smNoneEh;
  end;
end;
...
Рейтинг: 0 / 0
DBGrid: Title как Button
    #32085280
rock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2hDrummer
разве два? По-моему ты ошибаешься. Если внимательно поглядеть то можно там увидеть описания FTitleButtons, FOnTitleButtonClick, FOnCheckButton, DoTitleClick, DrawdataCell, ChecktitleButton и т.д. Гораздо больше чем двух. Ну ладно, буду разбираться. А пока придется юзать EhLib

2tygra
Спасибо за пример. Саму сортировку делать я могу. И примерно так я ее и делаю, но только на ADO. Но меня интересовал сам момент переделки DBGrid.
...
Рейтинг: 0 / 0
DBGrid: Title как Button
    #32085294
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
два, три...пять...ну уж никак не "тысячи"
...
Рейтинг: 0 / 0
DBGrid: Title как Button
    #32348404
Фотография Cooper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 tygra

Просто интересно, у тебя там (где !!!!!!!!) действительно smUpEh стоит или это опечатка?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
procedure TForm.DBGridEh1TitleClick(Column: TColumnEh);
  var i:integer;
begin

for i :=  0  to dbGrideh1.Columns.Count -  1  do
  begin
    if dbGrideh1.Columns[i].Title.TitleButton then
      if dbGrideh1.Columns[i].ID = Column.ID then
      begin
        if (dbGrideh1.Columns[i].Title.SortMarker in [smNoneEh, smDownEh]) !!!!!!!!!
         then
         begin
            dbGrideh1.Columns[i].Title.SortMarker := smDownEh;
            adostoredproc.Sort:=dbGrideh1.Columns[i].FieldName+' DESC';
         end
         else
         begin
           dbGrideh1.Columns[i].Title.SortMarker := smUpEh;
           adostoredproc.Sort:=dbGrideh1.Columns[i].FieldName+' ASC';
         end;
//         Query.SortFields := Grid.Columns[i].FieldName;
      end
      else
        dbGrideh1.Columns[i].Title.SortMarker := smNoneEh;
  end;

end;
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DBGrid: Title как Button
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]