Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1166453613
Cyrax
2006-12-18 17:53
2007.01.07
С каких слов начинается текст справки...


2-1166577368
Алексей Филонович
2006-12-20 04:16
2007.01.07
форма


2-1166563307
aleko
2006-12-20 00:21
2007.01.07
SQL-запросы


11-1143429106
sff
2006-03-27 07:11
2007.01.07
полосы прокрутки для scrollbox


15-1166344583
Gydvin
2006-12-17 11:36
2007.01.07
Вопрос по JavaScript





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский