Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > SpeedButton форматирование текста влево


Автор: pashkasan 18.12.2008, 20:05
привет, 
есть такая проблема:
стандартный компонент TSpeedButton

SpeedButton1.width=300
SpeedButton1.height=50
SpeedButton1.Margin=0
SpeedButton1.Layout=blGlyphLeft

программно меняем текст на

SpeedButton1.Caption := 'Pashka San +7 4242 406666'#13#10'Call duration 12:35';

вопрос: как сделать так чтоб 'Call duration 12:35' выводилось слева как и первая стока, у меня получается отступ гдет в пять пробелов (может баг в Delphi 7?)

если кто знает как в эту кнопку поместить два TLabel вместо Caption, было бы вообще отлично

нужно именно для TSpeedButton, тк используется компонента в которой есть кнопка которая наследует это класс

Tnx!



Автор: Christoph 19.12.2008, 00:53
То не баг а выравнивание по центру....по ходу нельзя выравнять название кнопки по левому краю...

Автор: NewDima 19.12.2008, 20:36
Цитата

может баг в Delphi 7?

для справки, текст на этой кнопке выводится процедурой
Код

function DrawText; external user32 name 'DrawTextA';

как видно она экспортируется из user32.dll, не надо грешить на delphi.
Цитата

если кто знает как в эту кнопку поместить два TLabel вместо Caption, было бы вообще отлично

Никак,  TSpeedButton наследует TGraphicControl
Цитата

TGraphicControl supports simple lightweight controls that do not need the ability to accept keyboard input or contain other controls. Since lightweight controls do not wrap Windows screen objects, they are faster and user fewer resources than controls based on TWinControl.

в отличие от TSpeedButton, TButton наследует TWinControl:
Цитата

The control can serve as a container for other controls, referred to as child controls. This relationship is signified by the child's Parent property

с ним помутить можно было бы, но скажу тебе, что это бред

Цитата

нужно именно для TSpeedButton, тк используется компонента в которой есть кнопка которая наследует это класс

что-то непонятно изъясняешься

Автор: pashkasan 21.12.2008, 16:40
может кому пригодится

function CaptionWrap(Line1: String; Line2: String): String;
 var len1,len2: integer;
     Line1new, Line2new: String;
     lbl: Tlabel;
     space_px_width: Integer;
     x: string;
     y: integer;
begin
//
space_px_width := 3;
lbl:=Tlabel.Create(nil);

lbl.Caption := Line1;
len1:= lbl.Width;

lbl.Caption := Line2;
len2:= lbl.Width;

line1new :=  Line1;
if (len2 > len1) then
repeat
line1new:= line1new + #32;
until StrLen(PAnsiChar(line1new)) = (StrLen(PAnsiChar(Line1)) + round((len2-len1)/space_px_width));

line2new :=  Line2;
if (len1 > len2) then
repeat
line2new:= line2new + #32;
until StrLen(PAnsiChar(line2new)) = (StrLen(PAnsiChar(Line2)) + round((len1-len2)/space_px_width));

result := Line1new + #10 + Line2new;

end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)