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

Вниз

Переход на новую строку в свойстве 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 &#151; Rect.Right);
   SetBounds(X, Top, Rect.Right, Rect.Bottom);
 end;
end;

procedure TCustomLabel.DoDrawText(var Rect: TRect; Flags: Longint);
const
 EllipsisStr = "&#133";
 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 &#151; 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, &#151;1, &#151;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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.03 c
2-1182587570
Ezorcist
2007-06-23 12:32
2007.07.22
Расстояние между строками?


15-1182431824
koha
2007-06-21 17:17
2007.07.22
В нашу сеть повадильсь кулхацкеры лазить


15-1182752797
de.
2007-06-25 10:26
2007.07.22
Открыть часть набора данных


2-1182513679
cosinus
2007-06-22 16:01
2007.07.22
Помогите с EnumChildWindows ...


2-1182866042
TruePunk
2007-06-26 17:54
2007.07.22
прозрачность