Форум: "Начинающим";
Текущий архив: 2007.01.07;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.032 c