Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.07;
Скачать: CL | DM;

Вниз

TCheckBox, TRadioBox - caption   Найти похожие ветки 

 
antonn ©   (2006-12-16 00:48) [0]

Наверное дурацкий вопрос, но надоело мучаться... Как в TCheckBox и TRadioBox сделать автоматическую ширину по тексту? Ну как в Tlabel autosize. Может есть простой способ, кроме как вычислять через канвас длину каншна?..

ЗЫ в проекте много сабжевых элементов, все в реалтайме меняют caption, текст иногда не влезает. А делать его заранее длинным - не красиво и не правильно.


 
antonn ©   (2006-12-16 00:50) [1]

пишу на Delphi 7


 
MsGuns ©   (2006-12-16 01:55) [2]

Ширину компонент, не имеющих Align, надо выставлять "ручками" в событии OnResize контейнера, на котором они лежат.


 
Джо ©   (2006-12-16 02:03) [3]

> [2] MsGuns ©   (16.12.06 01:55)
> Ширину компонент, не имеющих Align, надо выставлять "ручками"
> в событии OnResize контейнера, на котором они лежат.

Гм. А с чего событие OnResize у контейнера должно происходить всякий раз, когда в рантайм меняешь Caption у TCheckBox и TRadioBox?


 
Германн ©   (2006-12-16 02:14) [4]


> MsGuns ©   (16.12.06 01:55) [2]
>
> Ширину компонент, не имеющих Align

А кто сказал, что у TCheckBox нет Align"a?


 
MsGuns ©   (2006-12-16 02:16) [5]

>Джо ©   (16.12.06 02:03) [3]
>Гм. А с чего событие OnResize у контейнера должно происходить всякий раз, когда в рантайм меняешь Caption у TCheckBox и TRadioBox?

Я понял наоборот, в смысле когда меняется размер контейнера (например, панели), надо "красиво" подгонять эдиты, комбобоксы и т.д.


 
Джо ©   (2006-12-16 02:19) [6]

Я не вижу иного, как писать «ручками». А так уже самому выбирать, делать ли наследника он этих компонентов и перекрывать нужный метод или же вызывать особый метод после каждого изменения Caption вручную.


 
default ©   (2006-12-16 03:43) [7]

а вот в .NET у CheckBox-а, например, есть свойство AutoSize


 
Anatoly Podgoretsky ©   (2006-12-16 12:12) [8]

> antonn  (16.12.2006 0:48:00)  [0]

Почему некрасиво и неправильно?
Невидимая часть текста - невидима.


 
antonn ©   (2006-12-16 13:27) [9]

MsGuns ©   (16.12.06 1:55) [2]
нет, я только меняю капшн, контейнер постоянен в размерах

Джо ©   (16.12.06 2:19) [6]
видимо как нибудь так и придется делать...

Anatoly Podgoretsky ©   (16.12.06 12:12) [8]
но "кликается"


 
antonn ©   (2006-12-16 13:27) [10]

Anatoly Podgoretsky ©   (16.12.06 12:12) [8]
к тому же, если текст длиннее, чем область вывода на компоненте - он обрезается


 
sniknik ©   (2006-12-16 14:37) [11]

для TCheckBox в D7 можно сделать так
перед формой вставить

type
 TMyCheckBox = class(TCheckBox)
   procedure SetText(const Value: TCaption);
   function GetText: TCaption;
 published
   property Caption: TCaption read GetText write SetText;
 end;

 TCheckBox = class(TMyCheckBox);

 TForm1 = class(TForm)
   Button1: TButton;
   ....

и обработчики в

implementation

{$R *.dfm}

function TMyCheckBox.GetText: TCaption;
var
 Len: Integer;
begin
 Len := GetTextLen;
 SetString(Result, PChar(nil), Len);
 if Len <> 0 then GetTextBuf(Pointer(Result), Len + 1);
end;

procedure TMyCheckBox.SetText(const Value: TCaption);
var
 DC: HDC;
 SaveFont: HFont;
 TextSize: TSize;
begin
 if GetText <> Value then begin
   DC := GetDC(0);
   SaveFont := SelectObject(DC, Font.Handle);
   GetTextExtentPoint32(DC, PChar(Value), Length(Value), TextSize);
   SelectObject(DC, SaveFont);
   ReleaseDC(0, DC);
   SetBounds(Left, Top,
       TextSize.cx + (GetSystemMetrics(SM_CXBORDER) * 4 + 15),
       TextSize.cy + (GetSystemMetrics(SM_CYBORDER) * 4));

   SetTextBuf(PChar(Value));
 end;
end;

(скопировано из генофонда и немного "поисковерканно")

слабое место цифра 15, туда бы вставить ширину квадратика чекбокса, реальную, а не подобранную константу... на случае если меняется, при разных разрешениях/установках но это уже лень ;о), для TRadioBox тоже, можеш сделать по аналогии.
еще, естественно при таком подходе, будет работать только в модуле в котором описано.


 
antonn ©   (2006-12-16 15:23) [12]

sniknik ©   (16.12.06 14:37) [11]
спасибо!
про RadioBox я заговорился - TRadioButton :)



Страницы: 1 вся ветка

Текущий архив: 2007.01.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.052 c
3-1161369447
alex_sz
2006-10-20 22:37
2007.01.07
Размер базы *.gdb


11-1143112987
Евгений Ч
2006-03-23 14:23
2007.01.07
Проблема KOL и FPC


15-1165003353
Cyrax
2006-12-01 23:02
2007.01.07
Что делает JBuilder с JVM ?


15-1166449620
VitV
2006-12-18 16:47
2007.01.07
Задание


2-1166169912
KyRo
2006-12-15 11:05
2007.01.07
Эквалайзер