Главная страница
    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.014 c
3-1114643747
Димон
2005-04-28 03:15
2005.06.06
не запускается Oracle Net8 Easy Config


4-1113549534
старый маразматикЪ
2005-04-15 11:18
2005.06.06
Работаю с файлом при помощи ф-ций FileOpen FileRead FileWrite


1-1116871645
Dmitry
2005-05-23 22:07
2005.06.06
Проблемы с цветовыми схемами Windows


14-1116494164
BJValentine
2005-05-19 13:16
2005.06.06
Описалово компонентов RxLib


14-1116490509
*Pavel
2005-05-19 12:15
2005.06.06
Все пионеры поздравляются





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский