С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/35: Рейтинг темы: голосов - 35, средняя оценка - 4.71
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732

StringGrid + свой Hint для каждой ячейки

30.12.2011, 02:19. Показов 7268. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здасте.
Хочу вот сделать хинт для каждой ячейки, где текст длиннее чем колонка.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// ---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1MouseMove(TObject *Sender, TShiftState Shift,
    int X, int Y) {
 
    StringGrid1->MouseToCell(X, Y, Col, Row);
    if (Col != -1 && Row != -1 && Row != 0) {
        if (StringGrid1->Cells[Col][Row].Length() >= 4) {
            StringGrid1->Hint = StringGrid1->Cells[Col][Row];
        }
        else {
            StringGrid1->Hint = "";
        }
    }
    else {
        StringGrid1->Hint = "";
    }
}
пробовал так, но не знаю умно ли это + после перемещения с одной ячейки на другую, новый хинт не покажется до того как кликнуть, или вывести мышку за границы грида. Как сделать, чтобы сразу при переводе отображался, без нужды кликать или выводить за границы грида?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.12.2011, 02:19
Ответы с готовыми решениями:

Изменение Hint для каждого значения ячейки StringGrid
Всем доброго времени суток. Кто может подсказать как можно реализовать, что бы когда наводишь на ячейку StringGrid-a в Hint выводилось это...

Отображение номера ячейки StringGrid в Hint
У меня есть StringGrid с одной строчкой и некоторым кол-вом колонок. По наведении мыши на определенную ячейку, на экран в Hint выводится...

Как в StringGrid програмно вызвать показ Hint напротив ячейки
Всем привет. Задача такая: Есть StringGrid, нужно у ячейки c индексами x и y вывести Hint по нажатию кнопки на форме например. Или,...

11
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
30.12.2011, 02:30
делфий, но все "интуитивно понятно"
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// В приведенном примере отслеживается движение курсора мыши -
// при перемещении между ячейками StringGrid'а - появляется окно подсказки(hint),
// показываеющее номер текущей строки и колонки. 
 
type
  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;
Бонус: получить координаты конкретной ячейки StringGrid можно так:
C++
1
TRect tr = StringGrid1->CellRect(2,2);
1
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
30.12.2011, 02:41  [ТС]
да ,
C++
1
Application->CancelHint();
это то, что нужно. Спасибо
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void __fastcall TForm1::StringGrid1MouseMove(TObject *Sender, TShiftState Shift,
    int X, int Y) {
 
    StringGrid1->MouseToCell(X, Y, Col, Row);
    if (Col != -1 && Row != -1 && Row != 0) {
 
        if (StringGrid1->Cells[Col][Row].Length() >= 4) {
            StringGrid1->Hint = StringGrid1->Cells[Col][Row];
        }
        else {
            Application->CancelHint();
            StringGrid1->Hint = "";
        }
    }
    else {
        Application->CancelHint();
        StringGrid1->Hint = "";
    }
}
А вопрос насчет того, умно ли на маус мув ставить. Каждый раз проверять ведь будет когда юзер мышкой дернет

Ну я как бы сразу написал на маус муве, вот и спрашивал умно ли я сделал. А насчет бонуса я видел, но не оч понял к чему он и что с ним делать

Какая то у тебя странная тенденция, иногда неправильно воспринимать то, что я пишу
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
30.12.2011, 04:07
Можно в OnMouseEnter грида запускать таймер и по таймеру проверять позицию курсора - GetCursorPos - если курсор в координатах ячейки (бонус) - ScreenToClient - проверять длину текста в конкретной ячейке, если длина текста больше ширины ячейки - выводить подсказку. Или так, или MouseMove - а иначе, без отслеживания движения мыша, как?
0
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
30.12.2011, 11:13  [ТС]
Ну тогда оставлю на макс мув. Спасиб за помощь
0
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
10.05.2012, 01:45  [ТС]
Вопрос по хинту возник, новую тему создавать не хотелось т.к. вопрос простой, так что пишу здесь.
Так вот, как сделать, чтобы хинт появлялся на маус ентер (ну это ясно как), а пропадал не через некоторое время, а только при мус лив? То есть, чтобы хинт держался пока курсор находится в границах нужного обьекта
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.05.2012, 02:14
Ну ты же мне сам советовал Application->CancelHint();

Hint для объектов на TImage

Илм ты имеешь ввиду чтоб хинт ёрзал постоянно за курсором по стрингриду?
0
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
10.05.2012, 03:10  [ТС]
я имею ввиду чтобы он наоборот оставался все время, от того момента как курсор попал до того, как курсор покинул границы обьекта
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.05.2012, 03:51
C++
1
Application->HintHidePause=10e15;
Но он "зависает"

Добавлено через 3 минуты
Кажется нашел решение!!!!
C++
1
2
3
4
5
6
7
//---------------------------------------------------------------------------
void __fastcall TForm2::StringGrid1MouseMove(TObject *Sender, TShiftState Shift, int X,
          int Y)
{
Application->ActivateHint(StringGrid1->ClientToScreen(TPoint(X,Y)));
}
//---------------------------------------------------------------------------
1
wtf!?
 Аватар для Flyer
750 / 281 / 25
Регистрация: 21.05.2010
Сообщений: 732
10.05.2012, 15:12  [ТС]
Вот, хинтпауза это то, что нужно, спасибо

Добавлено через 3 часа 5 минут
как активировать хинт например image1 по клику на батон? То есть не наводя на сам имейдж
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.05.2012, 17:10
как активировать хинт например image1 по клику на батон? То есть не наводя на сам имейдж
Да.
Но суть в том что при перемещении мыши нужно еще осуществлять поиск объектом на Image
который занимает время и показывать хинт еще и тогда когда мышь остановилась на объекте.
0
2 / 2 / 1
Регистрация: 20.09.2013
Сообщений: 121
08.06.2016, 13:03
Я вот так сделал) тоже рабочий все ок.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int l,p;
void __fastcall TForm1::DBGrid2MouseMove(TObject *Sender, TShiftState Shift, int X,
          int Y)
{
String c;
TGridCoord md;
md=DBGrid2->MouseCoord(X,Y);
 
if (md.X>=1) {
    if (md.Y>=1) {
Form1->ADOQuery1->RecNo=md.Y;
c = Form1->ADOQuery1->FieldByName(\
Form1->ADOQuery1->Fields->FieldByNumber(md.X)->FieldName)->AsString;
        if (md.X>l||md.X<l||md.Y>p||md.Y<p) {
        Application->CancelHint();
        DBGrid2->Hint=c;
        l=md.X;
        p=md.Y;
        }
    }
}
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.06.2016, 13:03
Помогаю со студенческими работами здесь

Hint для каждой записи в DBGrid
Здравствуйте. Есть sDBGrid (использую Alpha Controls) в нем выводится порядка 1000 записей. Как сделать что бы при наведении мышкой на...

Обновление каждой ячейки StringGrid по времени с элементом Timer
Здравствуйте, вопрос в том чтобы каждая отдельная ячейка менялась по истечению времени в порядке очереди. Поясняю: ячейка 1 обновляется с...

Подсказки Hint в StringGrid
Всем привет! При создании темы из предложенных форумом похожих одна относится к аналогичной моей ( автор ХаКо...

Подсказки (Hint) в StringGrid
Здравствуйте. Мне нужно сделать так, чтобы при наведении (клике) мышкой на ячейке в определенной колонке (4-ой) появлялась подсказка,...

Ячейки StringGrid №1 для StringGrid №2
Доброго всем времени суток! Появился такой вопрос: как присвоить значения 1ой таблицы другой? Например чтобы 3ий столбец 1ой таблицы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru