![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Следующая задача - как можно для каждой строки DBGrid реализовать всплывающее окно с информацией для соответственной строки? Заранее спасибо!
|
|
#2
|
|||
|
|||
|
Не совсем понятно.. как это должно выглядеть?
|
|
#3
|
||||
|
||||
|
Может имеется ввиду Hint!?
|
|
#4
|
|||
|
|||
|
Да, имеется в виду Hint только он должен быть для каждой строки свой!
|
|
#5
|
||||
|
||||
|
Может в событии OnHint получать строку, и менять значение Hint'а уже в коде?
|
|
#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 выводишь получившуюся строку! ![]() Последний раз редактировалось Yurk@, 29.01.2008 в 18:41. |
|
#10
|
|||
|
|||
|
to Yurk@
Неее... А если строк более 100000 и несколько столбцов? Тогда проход циклом по всем строкам займет время... ![]() |
|
#11
|
||||
|
||||
|
Так имется ввиду только выделенная строка!
Все это должно быть под SelectedRows ... |