Форум: "Основная";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];
ВнизХинты для TStringGrid Найти похожие ветки
← →
Вопрошающий (2005-05-20 16:18) [0]Как сделать хинты для каждой ячейки компонента TStringGrid, особеднно для FixedRows?
← →
-=XP=- © (2005-05-20 16:24) [1]Обрабатывать событие: OnMouseMove;
Определять, над какой ячейкой находится указатель: MouseToCell(X; Y; var Col; var Row);
Устанавливать хинт в зависимости от Col и Row: Hint := "Col: " + IntToStr(Col) + "; Row: " + IntToStr(Row);
Выводить хинт: Application.ActivateHint(Point(X, Y));
← →
Игорь Шевченко © (2005-05-20 16:25) [2]Обрабатывать OnMouseMove, вызывать ActivateHint от THintWindow
← →
Игорь Шевченко © (2005-05-20 16:27) [3]Пример для ListBox, например, есть в http://www.delphikingdom.com/treasury/combo.htm
← →
Вопрошающий (2005-05-20 16:29) [4]а для FixedRows это будет работать?
← →
-=XP=- © (2005-05-20 16:30) [5]Для всех. И даже для пустого пространства.
← →
Antonn © (2005-05-20 16:41) [6]а вот и примерчик...
procedure TFormConf.SG_STATUSMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var r,c: integer;
begin
try
SG_STATUS.MouseToCell(X, Y, C, R);
with SG_STATUS do
begin
if ((Row <> r) or(Col <> c)) then
if (c<= SG_STATUS.ColCount-1) and (r<=SG_STATUS.RowCount-1) then
begin
Row := r;
Col := c;
Application.CancelHint;
SG_STATUS.Hint := SG_STATUS.Cells[c,r];
end;
end;
except
end;
end;
← →
Вопрошающий (2005-05-20 16:46) [7]а как выглядит ф-ция MouseToCell(X; Y; var Col; var Row)?
и как мне в хинт поместить значение ячейки из фиксированного ряда?
← →
-=XP=- © (2005-05-20 16:49) [8]Вопрошающий (20.05.05 16:46) [7]
Вам что, еще и про F1 рассказывать?
Вот еще!
← →
Вопрошающий (2005-05-20 17:19) [9]
> procedure TFormConf.SG_STATUSMouseMove(Sender: TObject;
> Shift: TShiftState; X, Y: Integer);
> var r,c: integer;
> begin
> try
> SG_STATUS.MouseToCell(X, Y, C, R);
> with SG_STATUS do
> begin
> if ((Row <> r) or(Col <> c)) then
> if (c<= SG_STATUS.ColCount-1) and (r<=SG_STATUS.RowCount-1)
> then
> begin
> Row := r;
> Col := c;
> Application.CancelHint;
> SG_STATUS.Hint := SG_STATUS.Cells[c,r];
> end;
> end;
> except
> end;
> end;
этот код немного глючит
если наводишь на фиксированную строку, то подней появляется копия фиксированной строки. Если фиксированных строк несколько, то при наведении на одну из ячеек фиксированной строки, появляется такое же количество строк, сколько есть фиксированных, со значениями в ячейках, которые присвоенный фиксированным строкам.
Кто знает, как можно убрать этот эффект?
← →
Вопрошающий (2005-05-20 20:00) [10]помогите переписать этот кусок кода под StringGrid
procedure TXDBGrid.MouseMove(Shift: TShiftState; X, Y: Integer);
var
Cell: TGridCoord;
iCurRec: Longint;
R: TRect;
P: TPoint;
S: String;
begin
inherited MouseMove(Shift, X, Y);
Cell := MouseCoord(X, Y);
if not OkToWork or EditorMode or
(DataLink.DataSet.State <> dsBrowse) or
DataLink.DataSet.ControlsDisabled or
(DataLink.DataSet.RecordCount = 0) or
DataLink.DataSet.IsEmpty or
((dgIndicator in Options) and (Cell.X = 0)) {or (Cell.Y = 0)} then
begin
CloseToolTipWindow;
Exit;
end;
if (FLastCol <> Cell.X) or (FLastRow <> Cell.Y) then begin
FLastCol := Cell.X;
FLastRow := Cell.Y;
if (Cell.X <= (LeftCol + VisibleColCount - 1)) and (Cell.X >= LeftCol) then begin
iCurRec := DataLink.ActiveRecord;
if FLastRow > 0 then begin
BeginUpdate;
try
DataLink.ActiveRecord := Cell.Y - 1;
if Assigned(Columns[RawToDataColumn(FLastCol)].Field)
then S := Columns[RawToDataColumn(FLastCol)].Field.DisplayText
else S := "";
finally
DataLink.ActiveRecord := iCurRec;
EndUpdate;
end;
end
else begin
S := Columns[RawToDataColumn(FLastCol)].Title.Caption;
end;
if (FHintWnd.Canvas.TextWidth(S) + 4) > Columns[RawToDataColumn(FLastCol)].Width then begin
R := CellRect(Cell.X, Cell.Y);
P := ClientToScreen(Point(R.Left, R.Top));
R := Rect(P.X, P.Y, P.X + FHintWnd.Canvas.TextWidth(S) + 7,
P.Y + RowHeights[Cell.Y] - 2);
OffsetRect(R, -1, -1);
FHintWnd.ActivateHint(R, S); // ïîêàæåì õèíò
// FHintWnd.Canvas.TextRect(R, 0, 0, S);
// FHintWnd.Canvas.Rectangle(R);
end
else CloseToolTipWindow;
end;
end;
end;
← →
Вопрошающий (2005-05-23 11:01) [11]Вот готовый вариант, если кому-то нужно...
procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
var r,c: integer;
CellRect:TRect;
s:string;
R1: TRect;
i,offsetX, offsetY:integer;
begin
if not Assigned(FHintWnd) then
FHintWnd := THintWindow.Create(Self);
StringGrid1.MouseToCell(X, Y, C, R);
if (c=-1) or (r=-1) then
Exit;
Label5.Caption:="Col:="+IntToStr(c)+" Row:=" +IntToStr(r);
s:=StringGrid1.Cells[c,r];
R1:=StringGrid1.CellRect(c,r);
if ((FHintWnd.Canvas.TextWidth(S) + 4)>(R1.Right-R1.Left) ) then
begin
OffsetRect(R1, X,Y);
R1.TopLeft:=ClientToScreen(R1.TopLeft);
R1.BottomRight:=ClientToScreen(R1.BottomRight);
R1.Right:=R1.Left+FHintWnd.Canvas.TextWidth(S)+7;
R1.Bottom:=R1.Top;
R1.Top:=R1.Bottom-StringGrid1.RowHeights[r];
OffsetRect(R1, StringGrid1.Left-1, StringGrid1.Top-1);
OffsetX:=0;
if c>0 then
for i:=0 to c-1 do
offsetX:=offsetX+StringGrid1.ColWidths[i];
OffsetY:=0;
if r>0 then
for i:=0 to r-1 do
offsetY:=offsetY+StringGrid1.RowHeights[i];
OffsetRect(R1, -offsetX, -offsetY);
FHintWnd.ActivateHint(R1, S);
end
else
if IsWindowVisible(FHintWnd.Handle) then
FHintWnd.ReleaseHandle;
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.06.06;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.013 c