Форум: "Начинающим";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];
ВнизПереход на новую строку в свойстве Items компонента RadioGroup? Найти похожие ветки
← →
Lebedev © (2007-06-19 08:38) [0]Как осуществить переход на новую строку в свойстве Items компонента RadioGroup? А так же в свойстве Caption.
То есть, если надпись напротив «элемента выбора» слишком длинная, что не влезает в окно, и хочется её сделать в две строки. В самом редакторе Items так сделать не удаётся, так как он воспринимает это как новый «элемент выбора».
То же относительно свойства Caption.
Спасибо!
← →
{RASkov} © (2007-06-19 13:12) [1]> Как осуществить переход на новую строку в свойстве Items
> компонента RadioGroup?
Не уверен что в D6 есть свойство WordWrap у TRadioButton"ов.... В D7 есть....var N: Integer;
begin
for N := 0 to RadioGroup.Items.Count-1 do
RadioGroup.Buttons[N].WordWrap:=True;
end;
← →
Lebedev © (2007-06-20 07:39) [2]В D6 выдаёт ошибку. Есть другой способ?
← →
Lebedev © (2007-06-20 13:59) [3]Up
← →
Kolan © (2007-06-20 14:20) [4]
procedure TCustomLabel.SetWordWrap(Value: Boolean);
begin
if FWordWrap <> Value then
begin
FWordWrap := Value;
AdjustBounds;
Invalidate;
end;
end;
procedure TCustomLabel.AdjustBounds;
const
WordWraps: array[Boolean] of Word = (0, DT_WORDBREAK);
var
DC: HDC;
X: Integer;
Rect: TRect;
AAlignment: TAlignment;
begin
if not (csReading in ComponentState) and FAutoSize then
begin
Rect := ClientRect;
DC := GetDC(0);
Canvas.Handle := DC;
DoDrawText(Rect, (DT_EXPANDTABS or DT_CALCRECT) or WordWraps[FWordWrap]);
Canvas.Handle := 0;
ReleaseDC(0, DC);
X := Left;
AAlignment := FAlignment;
if UseRightToLeftAlignment then ChangeBiDiModeAlignment(AAlignment);
if AAlignment = taRightJustify then Inc(X, Width — Rect.Right);
SetBounds(X, Top, Rect.Right, Rect.Bottom);
end;
end;
procedure TCustomLabel.DoDrawText(var Rect: TRect; Flags: Longint);
const
EllipsisStr = "…";
Ellipsis: array[TEllipsisPosition] of Longint = (0, DT_PATH_ELLIPSIS,
DT_END_ELLIPSIS, DT_WORD_ELLIPSIS);
var
Text, DText: string;
NewRect: TRect;
Height, Delim: Integer;
begin
Text := GetLabelText;
if (Flags and DT_CALCRECT <> 0) and ((Text = "") or FShowAccelChar and
(Text[1] = "&") and (Text[2] = #0)) then Text := Text + " ";
if not FShowAccelChar then Flags := Flags or DT_NOPREFIX;
Flags := DrawTextBiDiModeFlags(Flags);
Canvas.Font := Font;
if (FEllipsisPosition <> epNone) and not FAutoSize then
begin
DText := Text;
Flags := Flags and not DT_EXPANDTABS;
Flags := Flags or Ellipsis[FEllipsisPosition];
if FWordWrap and (FEllipsisPosition in [epEndEllipsis, epWordEllipsis]) then
begin
repeat
NewRect := Rect;
Dec(NewRect.Right, Canvas.TextWidth(EllipsisStr));
DrawText(Canvas.Handle, PChar(DText), Length(DText), NewRect, Flags or DT_CALCRECT);
Height := NewRect.Bottom — NewRect.Top;
if (Height > ClientHeight) and (Height > Canvas.Font.Height) then
begin
Delim := LastDelimiter(" "#9, Text);
if Delim = 0 then
Delim := Length(Text);
Dec(Delim);
if ByteType(Text, Delim) = mbLeadByte then
Dec(Delim);
Text := Copy(Text, 1, Delim);
DText := Text + EllipsisStr;
if Text = "" then
Break;
end else
Break;
until False;
end;
if Text <> "" then
Text := DText;
end;
if not Enabled then
begin
OffsetRect(Rect, 1, 1);
Canvas.Font.Color := clBtnHighlight;
DrawText(Canvas.Handle, PChar(Text), Length(Text), Rect, Flags);
OffsetRect(Rect, —1, —1);
Canvas.Font.Color := clBtnShadow;
DrawText(Canvas.Handle, PChar(Text), Length(Text), Rect, Flags);
end
else
DrawText(Canvas.Handle, PChar(Text), Length(Text), Rect, Flags);
end;
Вот кусок из VCL который делает WordWrap
← →
Lebedev © (2007-06-26 08:36) [5]Я D7 себе установил. Так что сейчас стало проще.
Только вопрос а как быть с заголовком у RadioButton? Как в Caption переносить на новую строку? Посмотрел, что свойство WordWrap в этом случае не работает.
← →
Lebedev © (2007-06-26 13:12) [6]up
← →
{RASkov} © (2007-06-26 20:12) [7]> [5] Lebedev © (26.06.07 08:36)
> Как в Caption переносить на новую строку?
Наверное только переписыванием компонента TRadioGroup....
Делфи нет.... глянуть...
← →
Германн © (2007-06-27 01:17) [8]
> {RASkov} © (26.06.07 20:12) [7]
>
> > [5] Lebedev © (26.06.07 08:36)
> > Как в Caption переносить на новую строку?
>
> Наверное только переписыванием компонента TRadioGroup...
> .
>
Я лично в тех случаях, когда мне нужны многострочный Капшен в компонентах, которые сами не умеют их отрисовывать, использую TLabel расположенный в том месте, где должен был бы (по идее) находиться Капшен.
:)
← →
{RASkov} © (2007-06-27 02:11) [9]> [8] Германн © (27.06.07 01:17)
+1
или стараюсь не допускать таких длинных названий...
В радиогроуп в зависимости от кол-ва итемов и размера самой группы может такой капшен выглядеть не красиво :)
Я пытался переписать(т.н. там минимальные изменения сделал и увидев лажу - плюнул) метод Паинт у Радиогроуп, перенос получился, но как я говорил... не красиво смотриться с итемами...
В данном случае можно воспользоваться Панель+Метка+Радиобутонны.... выровнив их как нужно в дизайнере... (если конечно динамично у автора итемы не меняются динамично в рантайме)... имхо.
← →
Германн © (2007-06-27 02:23) [10]
> {RASkov} © (27.06.07 02:11) [9]
>
> > [8] Германн © (27.06.07 01:17)
>
> +1
> или стараюсь не допускать таких длинных названий...
>
Не всегда возможно "описАть в двух словах" суть данной опции. А на хинт очень часто не обращают внимание. А уж чтение справки - это уже перебор для наших людёв! :)
← →
{RASkov} © (2007-06-27 02:26) [11]> Не всегда возможно "описАть в двух словах" суть данной опции.
Во-во.. порой прямо "бесишься" от придумывания "покороче"... :)) Ну или..да, метка+.... А куда деваться...)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.061 c