2 / 2 / 0
Регистрация: 14.10.2015
Сообщений: 57
1

Сделать значки в DbGrid на каждой строчке или кнопки

03.05.2016, 18:38. Показов 2464. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. У меня такой вопрос. Возможно ли сделать значки в DbGrid в новом пустом столбце или заменив значения в столбце как например 1 и т.д., чтобы по нажатию на которой у меня вызывалось событие или процедура по удалению записи? В принципе я читал и видел статьи, что можно в обычном DBGrid, но попробовав несколько примеров, я разочаровался. Лично я использую sDbGrid из AlphaControl компонентов. Вот собственно говоря скриншот мой, где вместо значения 1, я пытался вставить иконку:
Сделать значки в DbGrid  на каждой строчке или кнопки
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.05.2016, 18:38
Ответы с готовыми решениями:

В каждой строчке матрицы найти минимальный элемент и заменить остальные на минимальный в каждой строчке
дана целочисленная прямоугольная матрица.в каждой строчке найти минимальный элемент и заменить...

Сделать комментарии к каждой строчке кода, что они делают?
Код программы #include <iostream> using namespace std; bool solve_5(int a) { return...

Формы: Можно ли сразу всем сделать, или надо прорисовывать кнопки "ручками" для каждой
Здравствуйте! Подскажите "хитрость" (если есть) управления сразу всеми формами. Скажем есть 40...

работа с тектовым файлом. Очень большое кол-во строк. В каждой строке есть 3 числа. Первое чисол нужно изменять в каждой строчке по одной и той же фор
Добрый день. В общем задача такова: Есть Текстовый файл. Содержимое вот такое: ...

8
2 / 2 / 0
Регистрация: 14.10.2015
Сообщений: 57
03.05.2016, 20:29  [ТС] 2
В общем нашел ответ на свой вопрос! вот код события
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm11.sDBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
Im1:TBitmap;
begin
  Im1:=TBitmap.Create;
  if Column.FieldName='del' then
    begin
   with sDBGrid1.Canvas do
    begin
      Brush.Color:=clWhite;
      FillRect(Rect);
      if (sDBGrid1.DataSource.DataSet.FieldByName('del').Value=1) then
        begin
           ImageList1.GetBitmap(0,Im1)
        end;
        Draw(round((Rect.Left+Rect.Right-Im1.Width)/2),round((Rect.Top+Rect.Bottom-Im1.Height)/2),Im1);
    end;
    end;
end;
А вот собственно говоря и результат:
Сделать значки в DbGrid  на каждой строчке или кнопки
0
AxBxC=X
152 / 132 / 58
Регистрация: 27.04.2016
Сообщений: 540
03.05.2016, 21:30 3
Лучший ответ Сообщение было отмечено metalistik1 как решение

Решение

Delphi
1
if Column.FieldName='del' then
к колонке можно обращаться по индексу:
Delphi
1
if Column.Index= ... then
Im1:=TBitmap.Create; - можно перенести внутрь if (чтобы не создавать экземпляр впустую)
Delphi
1
2
3
begin
  ImageList1.GetBitmap(0,Im1)
end;
Бегинэнд лишний.

Добавлено через 9 минут
Delphi
1
2
3
4
5
6
if (sDBGrid1.DataSource.DataSet.FieldByName('del').Value=1) then
        begin
           ImageList1.GetBitmap(0,Im1)
        end;
        Draw(round((Rect.Left+Rect.Right-Im1.Width)/2),round((Rect.Top+Rect.Bottom-Im1.Height)/2),Im1);
end;
Вот этот кусок сомнительный.
Прлучается, что если ....Value <> 1 то картинка всё равно выводится, но не из ImageList1
0
2 / 2 / 0
Регистрация: 14.10.2015
Сообщений: 57
03.05.2016, 21:44  [ТС] 4
harrybook, насчет сомнительного куска ты прав, но там всегда будет 1, кстати такой вопрос при наводке на любую ячейку столбца можно сделать так, чтобы курсор мыши менялся? и да необходимо сделать по нажатию на данную иконку событие по удалению, желательно в тех же координатах
0
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
03.05.2016, 21:58 5
Delphi
1
2
3
4
5
6
procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
Var P: TGridCoord;
begin
P:=DBGrid1.MouseCoord(X, Y);
Caption:=IntToStr(P.X)+' - '+IntToStr(P.Y);
end;
Добавлено через 1 минуту
+ DBGrid1.Cursor
1
AxBxC=X
152 / 132 / 58
Регистрация: 27.04.2016
Сообщений: 540
03.05.2016, 22:11 6
Сразу и не отвечу, вопрос нужно прорабатывать.
Нажатие на иконку можно отслеживать по OnCellClick
1
2 / 2 / 0
Регистрация: 14.10.2015
Сообщений: 57
04.05.2016, 00:03  [ТС] 7
harrybook, можно, но не в моем случае с включенным RowSelect в Option DbGrid'a, а вот как иначе я не знаю

Добавлено через 18 минут
harrybook, отлично, все работает при включении в option dbgrida "MultiSelect"
0
AxBxC=X
152 / 132 / 58
Регистрация: 27.04.2016
Сообщений: 540
04.05.2016, 00:14 8
добавляем в раздел Protected:
coor : TGridCoord;
и тогда наверняка вдруг запляшут облака:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  coor := DBGrid1.MouseCoord(X, Y); // в coor всегда будут хранится Row Col таблицы, над которыми мышка
end;
// остальное - дело техники:
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
 if(coor.X = 1) then // первый столбец и т.д.
  begin
   .................
  end;
end;
1
2 / 2 / 0
Регистрация: 14.10.2015
Сообщений: 57
04.05.2016, 00:28  [ТС] 9
harrybook, блин я так пробовал по началу, после ответа BOGG ART, но немного иначе и поэтому у меня не получилось походу. Ну а щас отлично, можно конечно и с помощью multiselect, но так не красиво получается

Добавлено через 3 минуты
harrybook, а твое решение шикарное, спасибо огромное
0
04.05.2016, 00:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.05.2016, 00:28
Помогаю со студенческими работами здесь

Сделать так, чтобы при нажатии кнопки все поля в форме DBGrid заполнились
Есть форма для DBGrid, чтобы заполнить поля. Теперь мне необходимо чтобы при нажатие кнопки все...

Как сделать редактирование записи в таблице DBgrid (база firebird) двойным нажатием кнопки мыши
Есть база данных Firebird (fdb), на форме Datasourse, IbTable, IBQuery, IBDatabase, IBTransaction....

Коментарии к каждой строчке
Напишите пожалуйста коментарии к каждой строчке программы.. #include &quot;stdafx.h&quot; #include...

Дайте комментарий к каждой строчке
Задание про числа &quot;перевертыши&quot; #include &lt;stdio.h&gt; #include &lt;math.h&gt; int main() { int n,m,p;...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru