Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/30: Рейтинг темы: голосов - 30, средняя оценка - 4.60
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787

DBGrid выделение последней строки

08.08.2013, 18:42. Показов 6395. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, пытаюсь программно выделить последние строку:
Delphi
1
DBGrid1.DataSource.DataSet.Last;
но получается вот так:

как сделать чтоб выделение было не стрелкой, а целой полоской так как на 25 строке
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.08.2013, 18:42
Ответы с готовыми решениями:

Получить значение последней строки в DBGrid
Привет, помогите пожалуйста с следующей задачей: Есть DBGrid, в нем поле "№", и к примеру 100 строк как получить значение поля...

Выделение столба DBGrid
Хотелось бы выделять даблкликом на заголовке столба.

Выделение новых и редактируемых строк в DbGrid
Как выделить добавленную строку в DBGRID одним цветом, а отредактированную - другим. При этом выделение сохраняется до завершения...

11
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,612
08.08.2013, 19:01
В опциях DBGrid в Инспекторе Объектов поставить dgAlwaysShowSelection True
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
08.08.2013, 19:07  [ТС]
Цитата Сообщение от northener Посмотреть сообщение
В опциях DBGrid в Инспекторе Объектов поставить dgAlwaysShowSelection True
Стоит, но не помогло
Если начать крутить роликом на мишке тогда перекидывает в последнее строку
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,612
08.08.2013, 19:25
Цитата Сообщение от tdo22 Посмотреть сообщение
Если начать крутить роликом на мишке тогда перекидывает в последнее строку
Объясни точнее что куда перекидывает? И какая версия Дельфи?

Добавлено через 9 минут
Судя по картинке версия Дельфи Д7 или ниже. Я прав?
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
08.08.2013, 23:00  [ТС]
Цитата Сообщение от northener Посмотреть сообщение
Объясни точнее что куда перекидывает? И какая версия Дельфи?

Добавлено через 9 минут
Судя по картинке версия Дельфи Д7 или ниже. Я прав?
Дельфи XE4, если добавить запись, будет такая ситуация как на картинке, но если покрутить роликом мыши вверх, то последняя строка будет выделена нормально

Добавлено через 2 часа 57 минут
ап-ап
0
Эксперт Pascal/Delphi
 Аватар для droider
4888 / 2822 / 865
Регистрация: 04.10.2012
Сообщений: 10,264
08.08.2013, 23:38
А если так? Для события OnDataChange DataSource, к которому привязан TDBGrid прописать
Delphi
1
2
3
4
5
6
procedure TDM.DataSource1DataChange(Sender: TObject; Field: TField);
begin
DBGrid1.SelectedRows.CurrentRowSelected :=True;
end;
 
end.
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
09.08.2013, 00:23  [ТС]
Цитата Сообщение от droider Посмотреть сообщение
А если так? Для события OnDataChange DataSource, к которому привязан TDBGrid прописать
Delphi
1
2
3
4
5
6
procedure TDM.DataSource1DataChange(Sender: TObject; Field: TField);
begin
DBGrid1.SelectedRows.CurrentRowSelected :=True;
end;
 
end.
к сожелению не помогло
0
Эксперт Pascal/Delphi
 Аватар для droider
4888 / 2822 / 865
Регистрация: 04.10.2012
Сообщений: 10,264
09.08.2013, 00:32
Цитата Сообщение от tdo22 Посмотреть сообщение
к сожелению не помогло
Да, вышеприведенный код работает под Delphi7. Под XE3 -не пошел.
Тогда можно воспользоваться обработчиком события OnDrawColumnCell TDBGrid-a
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
implementation
 
{$R *.dfm}
type
  MyDBGrid = class(TCustomDBGrid);
 
...
 
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  with MyDBGrid(Sender) do begin
     if DataLink.ActiveRecord = Row - 1 then //если строка является текущей
       Canvas.Brush.Color  := clGray//выделяем ее серым цветом
     else
       Canvas.Brush.Color  := clWhite; //цвет по умолчанию
    DefaultDrawColumnCell(Rect, DataCol, Column, State); //окрашиваем
  end;
 
end;
1
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
09.08.2013, 00:49  [ТС]
Цитата Сообщение от droider Посмотреть сообщение
Да, вышеприведенный код работает под Delphi7. Под XE3 -не пошел.
Тогда можно воспользоваться обработчиком события OnDrawColumnCell TDBGrid-a
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
implementation
 
{$R *.dfm}
type
  MyDBGrid = class(TCustomDBGrid);
 
...
 
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  with MyDBGrid(Sender) do begin
     if DataLink.ActiveRecord = Row - 1 then //если строка является текущей
       Canvas.Brush.Color  := clGray//выделяем ее серым цветом
     else
       Canvas.Brush.Color  := clWhite; //цвет по умолчанию
    DefaultDrawColumnCell(Rect, DataCol, Column, State); //окрашиваем
  end;
 
end;
Цвет выделиной строки сменился на серый, но проблема осталась
но теперь я понял почему, в DBGrid1DrawColumnCell у меня вписан вот такой код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
  var
    Zn:Double;
    R:TRect;
    i: integer;
begin
  i:=DBGrid1.DataSource.DataSet.FieldByName('Цена').Index;
  R:=Rect;
  InflateRect(R, -2, -2);
  if Column.Index=i
    then
      begin
        Column.Title.Caption:=ComboBox1.Text;
        Zn := 0;
        if DataM.ADOQuery['Цена'] <> NULL
          then
            Zn := DataM.ADOQuery['Цена']*StrToFloatDef(Edit1.Text,0);
        DrawText(DBGrid1.Canvas.Handle, PChar(Format('%8.2n',[Zn])), -1, R, DT_RIGHT);
      end;
end;
он для того, чтоб пересчитывать валюту,
и с ним тоже проблемы, на Xp он работает нормально, но на Висте и 7, при пересчете просвечивается старые значение, как его можно изменить ?
0
Эксперт Pascal/Delphi
 Аватар для droider
4888 / 2822 / 865
Регистрация: 04.10.2012
Сообщений: 10,264
09.08.2013, 00:53
Цитата Сообщение от tdo22 Посмотреть сообщение
проблема осталась
У меня без проблем выделяет, включая последнюю запись (Delphi XE3, Windows 8).
Пропишите в этот обработчик код, приведенный мной. Расчеты здесь неуместны.
0
14 / 14 / 13
Регистрация: 14.02.2013
Сообщений: 787
09.08.2013, 00:58  [ТС]
Цитата Сообщение от droider Посмотреть сообщение
У меня без проблем выделяет, включая последнюю запись (Delphi XE3, Windows 8).
Пропишите в этот обработчик код, приведенный мной. Расчеты здесь неуместны.
все нормально работает если не прописывать код расчета, но он мне нужен, я не могу его убрать от туда
нужно либо сменить код расчета, или искать другой путь
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,612
09.08.2013, 01:38
Цитата Сообщение от tdo22 Посмотреть сообщение
он для того, чтоб пересчитывать валюту,
и с ним тоже проблемы, на Xp он работает нормально, но на Висте и 7, при пересчете просвечивается старые значение, как его можно изменить ?
И на ХР будет просвечивать, если подходящую тему Windows подобрать. Обсуждали ведь уже что рисовать ячейку должен кто-то один. Либо пользовательский код, либо сам DBGrid. Иначе если рисуют оба, то получается каша.
А для пересчета значения поля "Цена" обработчик OnDrawColumnCell действительно неподходящее место. А самое подходящее место это обработчик TField.OnGetText.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.08.2013, 01:38
Помогаю со студенческими работами здесь

Удалить все символы строки до последней точки, и взять символы, идущие только после последней точки
Имеется текст примерно такого вида : attachment; filename=&quot;Subway_Surfers_1.26.0_money.apk&quot; нужно сделать чтобы в первый edit вывело...

Удаление последней строки из Memo
Доброго времени суток! Столкнулся с такой проблемой: при выводе текста в Memo добавляется пустая строка (без пробелов, просто курсор...

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

Заполнение последней строки StringGrid нулями.
Дана таблица StringGrid (Delphi). Количество строк неизвестно. Как заполнить последнюю строку нулями?

Чтение последней строки из текстового файла
Здравствуйте Уважаемые. Подскажите код кому не сложно. Имеется текстовый файл links_skipped.txt который периодически пополняется...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru