Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обрезание текста в StatusBar.panels, delphi7 
V
    Опции темы
TheCetus
Дата 30.3.2006, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 9.3.2006

Репутация: 2
Всего: 2



следующим кодом устанавливаю текст в строке статуса
Код

pnlText :string;
pnlIndex : integer;
begin
  StatusBar.Canvas.Font := StatusBar.Font;
  StatusBar.Panels.Items[pnlIndex].Text := pnlText;
  StatusBar.Panels.Items[pnlIndex].Width := StatusBar.Canvas.TextWidth(pnlText);
end;

но получается следующее (см приложение): текст обрезается...
как лечить?


Присоединённый файл ( Кол-во скачиваний: 19 )
Присоединённый файл  3.JPG 46,55 Kb
PM MAIL   Вверх
Snowy
Дата 30.3.2006, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(TheCetus @ 30.3.2006, 11:55 Найти цитируемый пост)
Width

StatusBar.Panels.Items[pnlIndex].ClientWidth := StatusBar.Canvas.TextWidth(pnlText) + BorderWidth;
Добавлено @ 12:01
Width - это ширина самой панельки. А тебе нужна ширина содержимого с учетом рамки.
PM MAIL   Вверх
TheCetus
Дата 30.3.2006, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 9.3.2006

Репутация: 2
Всего: 2



если бы это свойство (ClientWidth) было у Panels.Items я бы не спрашивал ))
Добавлено @ 12:18
посмотрел :
StatusBar.BorderWidth = 0
PM MAIL   Вверх
Guedda
Дата 30.3.2006, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



А если так сделать:
Код

StatusBar.Panels.Items[pnlIndex].Width := StatusBar.Canvas.TextWidth(pnlText) + 5;

???
Попробуй...

Это сообщение отредактировал(а) Guedda - 30.3.2006, 13:48


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
TheCetus
Дата 30.3.2006, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 9.3.2006

Репутация: 2
Всего: 2



сейчас баг затыкается именно так.
но как определить размер константы? почему именно 5?
на домашней машине прекрасно работает и в первоначальном варианте, а на рабочей идет 'обрезание текста' ...
вопрос по прежнему остается открытым
PM MAIL   Вверх
Yanis
Дата 30.3.2006, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(TheCetus @ 30.3.2006, 18:35 Найти цитируемый пост)
на домашней машине прекрасно работает и в первоначальном варианте, а на рабочей идет 'обрезание текста' ...
Наверное шрифты разные на двух машинах.

Думаю, константу данную можно высчитывать как разность между Rect.Left второй панели (StatusBar1.Panels.Items[1]) и Rect.Right первой панели (StatusBar1.Panels.Items[0]).

Это сообщение отредактировал(а) Yanis - 31.3.2006, 10:58


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
TheCetus
Дата 31.3.2006, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 9.3.2006

Репутация: 2
Всего: 2



как узнать Rect у панели?
Добавлено @ 10:06
StatusBar.Panels.Items[i]
Добавлено @ 10:16
кстати, если это важно... фома имеет стиль fsMDIForm
PM MAIL   Вверх
Yanis
Дата 31.3.2006, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(TheCetus @ 31.3.2006, 10:05 Найти цитируемый пост)
как узнать Rect у панели?

SB_GETRECT
Добавлено @ 10:22
Код

function GetPanelRect(hSb: hWnd; index: Integer): TRect;
const
  SB_GETRECT = WM_USER + 10;
begin
  SendMessage(hSb, SB_GETRECT, index, LongInt(@Result));
end;



--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
TheCetus
Дата 31.3.2006, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 9.3.2006

Репутация: 2
Всего: 2



у StatusBar.Panels.Items[i] нет хэндла... TStatusPanel не наследуется от TControl...
PM MAIL   Вверх
Yanis
Дата 31.3.2006, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(TheCetus @ 31.3.2006, 10:41 Найти цитируемый пост)
у StatusBar.Panels.Items[i] нет хэндла... TStatusPanel не наследуется от TControl...

Я знаю. Я тебе функцию для чего привёл? Первый параметр хэндл StaustBar'а, а второй параметр номер (нумеруются от нуля) панельки у которой хочешь узнать Rect.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
TheCetus
Дата 31.3.2006, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 9.3.2006

Репутация: 2
Всего: 2



Код

procedure Test;
var
  Rect0 : TRect;
  Rect1 : TRect;
begin
  SendMessage(StatusBar.Handle, SB_GETRECT, 0, LParam(@Rect0));
  SendMessage(StatusBar.Handle, SB_GETRECT, 1, LParam(@Rect1));
  ShowMessage(IntToStr(Rect0.Left + Rect0.Right - Rect1.Left));
end;


возвращает -2 %)
PM MAIL   Вверх
Yanis
Дата 31.3.2006, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Код

var
  Rect0: TRect;
  Rect1: TRect;
begin
  SendMessage(StatusBar1.Handle, SB_GETRECT, 0, LParam(@Rect0));
  SendMessage(StatusBar1.Handle, SB_GETRECT, 1, LParam(@Rect1));
  ShowMessage(IntToStr(Rect1.Left - Rect0.Right));

Добавлено @ 10:58
Я ошибся в своём первом посте, что из чего вычитать надо.

Это сообщение отредактировал(а) Yanis - 31.3.2006, 10:59


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
TheCetus
Дата 31.3.2006, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 9.3.2006

Репутация: 2
Всего: 2



точно, блин, я тоже ступил ;)
Добавлено @ 11:14
с этим разобрались, но текст выводится вплотную... нет отступа текста от границы панельки...
PM MAIL   Вверх
TheCetus
Дата 31.3.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 9.3.2006

Репутация: 2
Всего: 2



нет отствупа справа, но есть отступ слева, текст выводится без пробелов
PM MAIL   Вверх
Yanis
Дата 31.3.2006, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(TheCetus @ 31.3.2006, 11:21 Найти цитируемый пост)
нет отствупа справа, но есть отступ слева, текст выводится без пробелов

А что тебе мешает расширить немного панельку? Отступ это визуальный приём, т.е. текст то помещается ровно по размерам, если ты всё делаешь правильно, а тебе наверено просто надо прибавить 1-3 пиксела к ширине панельки, что бы отступ был. В чём проблема?


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0678 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.