Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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); // &#239;&#238;&#234;&#224;&#230;&#229;&#236; &#245;&#232;&#237;&#242;
//        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
1-1116870063
Masta Hookah
2005-05-23 21:41
2005.06.06
Извлечение 2-ух CD-приводов...


1-1116714031
Destroyer
2005-05-22 02:20
2005.06.06
Вопрос по обработке ошибок


1-1116787970
Volume
2005-05-22 22:52
2005.06.06
Проверка содержимого дискеты


9-1110439112
4ECHOK
2005-03-10 10:18
2005.06.06
Cтолкновение с bsp-картой с помощью ODE ?


1-1116486130
denisww
2005-05-19 11:02
2005.06.06
вWord таблица заполнена в произвольной форме обьектами formfield





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский