Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/40: Рейтинг темы: голосов - 40, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 30.10.2019
Сообщений: 25

Отображение в Hint

31.10.2019, 00:02. Показов 9725. Ответов 52

Студворк — интернет-сервис помощи студентам
Привет всем! Я сделал так чтобы при наведении мышки на строку в ListBox показывался Hint с нужным содержимым, это все работает хорошо. Но есть проблема с отображением содержимого в самом Hint, сейчас постараюсь объяснить. У меня в Hint выводится информация в несколько строк и переношу их вот таким кодом - #13#10 и в итоге получается примерно так:

1строка) Тут имя файла того на который навели мышь
#13#10
2строка) Тут отображается размер файла
#13#10
3строка) Тут отображается дата и время создания файла

И выглядит это в Hint так:

Новый текстовый документ (26) Новый текстовый документ (26).txt
127 Кб
29.10.2019 16:48

И теперь к сути, как сделать так чтобы первая строка переносилась если она длинная по таким же правилам как переносится длинный текст в самой Windows? Ну или хотя бы что то похожее, и второе как сделать так чтобы в Hint выравнивание было не по левому краю а по центру? Чтобы выглядело примерно так:

.....Новый текстовый документ (26) Новый
............текстовый документ (26).txt
........................127 Кб
..................29.10.2019 16:48

В место точек естественно не должно не чего быть это так для наглядности.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.10.2019, 00:02
Ответы с готовыми решениями:

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

Неясный HINT [Hint] Unit1.pas(2910): Value assigned to 'a' never used
var a:integer; . . . . a:=0; . . . .

Hint
Для каждой кнопки определить подсказку (Hint), описывающую функцию кнопки, причем подсказка появляется не стандартным образом, а вместе с...

52
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
06.11.2019, 00:54
Студворк — интернет-сервис помощи студентам
Можно и так. Просто надо понимать/помнить, что это принудительное игнорирование настроек VCL.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Procedure TMyHintWindow.Paint();
Var
  Rect: TRect;
  Text: String;
Begin
Text := Caption;
With Canvas Do
  Begin
  Lock();
  Rect := ClientRect;
  If (FGradient) Then
    GradientFillCanvas(Canvas, clRed, clBlue, Rect, gdVertical)
  Else
    Begin
    Brush.Color := clGreen;
    FillRect(ClipRect);
    End;
  Rect.Inflate(-FPaddingLeftRight, -FPaddingTopBottom);
  // Rect.Inflate(1, 0); // разобраться...
  Font.Color := clLime;
  TextRect(Rect, Text, FTextFormat);
  Unlock();
  End;
End;
Добавлено через 1 минуту
Ах, да...
Delphi
1
2
Uses
  Vcl.GraphUtil;
1
0 / 0 / 0
Регистрация: 30.10.2019
Сообщений: 25
06.11.2019, 02:22  [ТС]
Цитата Сообщение от GoodWeather Посмотреть сообщение
Просто надо понимать/помнить, что это принудительное игнорирование настроек VCL.
И чем это грозит? Ошибками, багами и т.д.? А цвет рамки самого прямоугольника можно указать, если да то как?

Добавлено через 1 час 17 минут
GoodWeather, И еще тут
Delphi
1
If (FGradient) Then
выдает ошибку, пишет неизвестный идентификатор.
0
561 / 230 / 88
Регистрация: 11.07.2015
Сообщений: 817
06.11.2019, 12:13
Цитата Сообщение от Roshtein Посмотреть сообщение
выдает ошибку, пишет неизвестный идентификатор.
Так обьявите в private
Delphi
1
FGradient: Boolean;
Крисиво смотриться.
Изображения
 
0
0 / 0 / 0
Регистрация: 30.10.2019
Сообщений: 25
06.11.2019, 20:15  [ТС]
Для чего вообще нужно это условие?
Цитата Сообщение от GoodWeather Посмотреть сообщение
If (FGradient) Then
Этот код:
Delphi
1
GradientFillCanvas(Canvas, clRed, clBlue, Rect, gdVertical)
может не правильно сработать?
0
0 / 0 / 0
Регистрация: 30.10.2019
Сообщений: 25
07.11.2019, 21:36  [ТС]
GoodWeather, Для чего вообще нужно это условие? If (FGradient) Then
Этот код:
Delphi
1
GradientFillCanvas(Canvas, clRed, clBlue, Rect, gdVertical)
может не правильно сработать?
Цитата Сообщение от GoodWeather Посмотреть сообщение
Просто надо понимать/помнить, что это принудительное игнорирование настроек VCL
И чем это грозит? Ошибками, багами и т.д.? А цвет рамки самого прямоугольника можно указать, если да то как?
0
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
07.11.2019, 21:41
Флаг-настройка каким способом заливать фон - градиент или какой-то цвет. Можете убрать и оставить что-то одно.

Кто-то захочет поменять цвет фона, вызовет Application.HintColor := clRed;, а по факту ничего не произойдёт, и этот кто-то даже не узнает об этом.

У вас же есть Canvas - ну дак рисуйте всё что угодно. Хоть Rectangle()-ом, хоть чем.
0
0 / 0 / 0
Регистрация: 30.10.2019
Сообщений: 25
07.11.2019, 22:10  [ТС]
GoodWeather, Спасибо понятно. И последний вопрос, можно как-то условием сделать так чтобы если подсказка показывается у ListBox то текст был бы по центру, а если не у ListBox то как обычно по левому краю? А то сейчас везде подсказки таким форматом который мне нужен только в ListBox.
0
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
08.11.2019, 00:50
Тут уже не знаю как лучше...
Это же надо для начала как-то узнать у какого контрола выводится подсказка...
Можно конечно попробовать FindDragTarget(Mouse.CursorPos, True)... Или вон кажется есть некий (неизвестный мне) ListBox1.CustomHint...
...или как-то перед установкой значения подсказки... что-то делать...
0
0 / 0 / 0
Регистрация: 30.10.2019
Сообщений: 25
08.11.2019, 00:59  [ТС]
GoodWeather, Вот что-то такое бы:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
constructor TMyHintWindow.Create(AOwner: TComponent);
begin
if ListBox1 then
begin
  FTextFormat := [tfWordBreak, tfCenter, tfVerticalCenter, tfEditControl];
...
  FMinWidth := 100;
end;
if Button1 then
begin
  FTextFormat := [tfLeft];
...
  FMinWidth := 40;
end;
...
  inherited;
end;
Как бы вот так сделать было бы идеально, можно что то подобное сделать?
0
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
08.11.2019, 02:42
ну... Подсказка одна на всё приложение, и она не привязана к компоненту...
0
0 / 0 / 0
Регистрация: 30.10.2019
Сообщений: 25
08.11.2019, 13:57  [ТС]
GoodWeather, И нельзя ее привязать к нужному компоненту? Может можно как-то сделать TMyHintWindow только для нужных компонентов что-то вроде TMyHintListBox, TMyHintButton и т.д. а чтобы та подсказка которая на все приложение вообще не затрагивалась?

Добавлено через 1 час 9 минут
GoodWeather, Попробовал использовать FindDragTarget(Mouse.CursorPos, True) в TMyHintWindow.Create (по типу из поста 49) но условие срабатывает только один раз, то есть запустил программу и навел например на ListBox то подсказка с текстом по центру, потом навожу на Button подсказка так же остается по центру, а если перезапустить программу и сначала навести на Button то подсказка будет с текстом слева, потом навожу на ListBox подсказка так же остается слева. В общем код срабатывает только один раз на тот TControl на который первый навели. Как менять при каждом наведении?
0
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
08.11.2019, 17:09
Ну не в Create же. При каждом рисовании придётся. И ещё раз отмечаю - тут я уже не уверен что сие правильно.

Возможно следует изучить что такое CustomHint, но я с ним не работал.
0
0 / 0 / 0
Регистрация: 30.10.2019
Сообщений: 25
08.11.2019, 18:06  [ТС]
GoodWeather, Нельзя сделать по типу TMyHintWindow только для нужных компонентов что-то вроде TMyHintListBox, TMyHintButton и т.д.? А то блин все зря получается((
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.11.2019, 18:06

Hint
Доброе утро! Ребята, подскажите, в чём проблема. Всё работало нормально до определённого вечера, а потом не стало работать....

Hint.
доброго времени суток! Кто знает, как можно создать многострочный динамический хинт к любому элементу на форме? Как это например...

Hint...
Здравствуйте! Как обновить время? Пишу: procedure TForm1.PanelHint(Sender:TObject); begin statusbar1.Panels.Text:=application.Hint; ...

ListBox и Hint
Ребятки помогите с одной проблемой, не как не получается сделать Hint при наведении курсора на строку которая не помещается по длине в...

Hint timeout
В моем приложении много объектов, при наведении на которые отображается hint. Но он отображается не более одной секунды. Можно ли как...


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

Или воспользуйтесь поиском по форуму:
53
Ответ Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru