Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Хинты в DBGrid [D7, XP]


madmech ©   (2009-03-18 15:23:00) 

Возникла проблема с DBGrid'ом, а точнее с хинтами к нему. При наведении на определенный элемент в DBGrid (например, на EE) появляется хинт, при смещении указателя он исчезает, как ему и положено и как заложено в код программы. Но! При перемещение ентого указателя в сторону нижнего правого угла, вверху появляется странное мерцание, как будто хинт исчезает и снова появляется.

Код обработчика перемещения мыши:
procedure TMainForm.MDBGridMouseMove(Sender: TObject; Shift: TShiftState;
 X, Y: Integer);              // Обработка перемещения курсора мыши над MDBGrid
var XX, YY, CurRec: integer;
 procedure HideHint;
 begin
   Application.HideHint;
   Exit;
 end;
begin
 XX := MDBGrid.MouseCoord(x,y).x;
 YY := MDBGrid.MouseCoord(x,y).y;
 Label1.Caption := IntToStr(XX) + ', ' + IntToStr(YY);
 with THackDBGrid(MDBGrid) do
   begin
       if ((XX <> MDBGrid.Columns.Count - 2) or (YY <> 0)) and
          ((XX <> 3) or (YY <> N2 + 1))  then
         HideHint;
     CurRec := DataLink.ActiveRecord;
     DataLink.ActiveRecord := YY - 1;
       if (XX = MDBGrid.Columns.Count - 2) and (YY = 0) then
         MDBGrid.Hint := 'Cоциометрический' + #13 + '          статус';
       if (XX = 3) and (YY = N2 + 1) then
         MDBGrid.Hint := 'Эмоциональная' + #13 + 'экспансивность';
     Application.ActivateHint(Point(X,Y));
     DataLink.ActiveRecord := CurRec;
   end;
end;


Выглядит таблица и мерцание следующим образом:
http://fo-ma.ru/8/73/59/387359/5.jpg


madmech   (2009-03-18 15:43:00) [1]

Проблему решил буквально через 5 минут после того, как написал сообщение, следующим образом:
procedure TMainForm.MDBGridMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);              // Обработка перемещения курсора мыши над MDBGrid
var XX, YY, CurRec: integer;
procedure HideHint;
begin
  MDBGrid.ShowHint := False;
  Exit;
end;
begin
XX := MDBGrid.MouseCoord(x,y).x;
YY := MDBGrid.MouseCoord(x,y).y;
Label1.Caption := IntToStr(XX) + ', ' + IntToStr(YY);
with THackDBGrid(MDBGrid) do
  begin
      if ((XX <> MDBGrid.Columns.Count - 2) or (YY <> 0)) and
         ((XX <> 3) or (YY <> N2 + 1))  then
        HideHint;
    CurRec := DataLink.ActiveRecord;
    DataLink.ActiveRecord := YY - 1;
      if (XX = MDBGrid.Columns.Count - 2) and (YY = 0) then
        begin
          MDBGrid.ShowHint := True;
          MDBGrid.Hint := 'Cоциометрический' + #13 + '          статус';
        end;
     if (XX = 3) and (YY = N2 + 1) then
        begin
          MDBGrid.ShowHint := True;
          MDBGrid.Hint := 'Эмоциональная' + #13 + 'экспансивность';
        end;  
    Application.ActivateHint(Point(X,Y));
    DataLink.ActiveRecord := CurRec;
  end;
end;

:)


Наверх

Титульная страница Поиск, карта сайта Написать письмо