|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Всплывающее окно для DBGrid
Следующая задача - как можно для каждой строки DBGrid реализовать всплывающее окно с информацией для соответственной строки? Заранее спасибо!
|
#2
|
|||
|
|||
Не совсем понятно.. как это должно выглядеть?
|
#3
|
||||
|
||||
Может имеется ввиду Hint!?
Кому я должен - всем прощаю!!!! |
#4
|
|||
|
|||
Да, имеется в виду Hint только он должен быть для каждой строки свой!
|
#5
|
||||
|
||||
Может в событии OnHint получать строку, и менять значение Hint'а уже в коде?
Что делать, когда сломался комп: 1. Если вы юзер - делать ноги. 2. Если ремонтник - делать деньги. 3. Если вы программист - делать вид, что так было задумано. |
#6
|
|||
|
|||
Возможно, надо будет попробовать!
|
#7
|
|||
|
|||
Для StringGrid можно так. Но это для каждой ячейки.
Код:
TForm1 = class(TForm) StringGrid1: TStringGrid; procedure StringGrid1MouseMove(Sender: TObject;Shift: TShiftState; X, Y: Integer); procedure FormCreate(Sender: TObject); private {Private declarations} Col : integer; Row : integer; public {Public declarations} end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin StringGrid1.Hint := '0 0'; StringGrid1.ShowHint := True; end; procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var r: integer; c: integer; begin StringGrid1.MouseToCell(X, Y, C, R); with StringGrid1 do begin if ((Row <> r) or(Col <> c)) then begin Row := r; Col := c; Application.CancelHint; StringGrid1.Hint :=IntToStr(r)+#32+IntToStr(c); end; end; end; Ну а по логике вещей, можно то же самое сделать и для DBGrid. Для того, чтобы в DBGrid можно было использовать Cols и Rows, необходимо зарегестрировать новый компонент DbGrid, но уже со свойствами Col и Row. Вот код: Код:
interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, DB, Menus; type TDBGridVUB = class(TDBGrid) private { Private declarations } protected { Protected declarations } public property Canvas; function CellRect(ACol, ARow: Longint): TRect; property Col; property Row; procedure Register; implementation procedure Register; begin RegisterComponents('VUBudget', [TDBGridVUB]); end; function TDBGridVUB.CellRect(ACol, ARow: Longint): TRect; begin Result := inherited CellRect(ACol, ARow); end; end. |
#8
|
|||
|
|||
Для StringGrid можно так. Но это для каждой ячейки.
Код:
TForm1 = class(TForm) StringGrid1: TStringGrid; procedure StringGrid1MouseMove(Sender: TObject;Shift: TShiftState; X, Y: Integer); procedure FormCreate(Sender: TObject); private {Private declarations} Col : integer; Row : integer; public {Public declarations} end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin StringGrid1.Hint := '0 0'; StringGrid1.ShowHint := True; end; procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var r: integer; c: integer; begin StringGrid1.MouseToCell(X, Y, C, R); with StringGrid1 do begin if ((Row <> r) or(Col <> c)) then begin Row := r; Col := c; Application.CancelHint; StringGrid1.Hint :=IntToStr(r)+#32+IntToStr(c); end; end; end; Ну а по логике вещей, можно то же самое сделать и для DBGrid. Для того, чтобы в DBGrid можно было использовать Cols и Rows, необходимо зарегестрировать новый компонент DbGrid, но уже со свойствами Col и Row. Вот код: Код:
interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, DB, Menus; type TDBGridVUB = class(TDBGrid) private { Private declarations } protected { Protected declarations } public property Canvas; function CellRect(ACol, ARow: Longint): TRect; property Col; property Row; procedure Register; implementation procedure Register; begin RegisterComponents('new_DBGrid', [TDBGridNew]); end; function TDBGridVUB.CellRect(ACol, ARow: Longint): TRect; begin Result := inherited CellRect(ACol, ARow); end; end. |
#9
|
||||
|
||||
Цитата:
Берешь переменную S:String; и в цыкле проходишь по всем столбцам DBGrid-a, присваивая S сначение S:=S+' '+ячейка каждого столбца в отдельности; А потом уже в Hint выводишь получившуюся строку! Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Последний раз редактировалось Yurk@, 29.01.2008 в 18:41. |
#10
|
|||
|
|||
to Yurk@
Неее... А если строк более 100000 и несколько столбцов? Тогда проход циклом по всем строкам займет время... |
#11
|
||||
|
||||
Так имется ввиду только выделенная строка!
Все это должно быть под SelectedRows ... Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|