Форум: "Компоненты";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];
ВнизДобавить свойство Caption. Найти похожие ветки
← →
iBitmap © (2004-08-25 14:37) [0]Доброе время суток!
Как компоненту добавить свойство Caption, если компонент основан на TImage (т.е. его родитель TImage). Нужно чтобы Caption писалось поверх изображения (как у Button). Напишите пожалуйста отрывок кода.
← →
KapitAl (2004-08-25 15:52) [1]Возможно подойдет эта процедура. Перекрывай Paint и после вызова inherited попробуй вызвать drawcaption (само свойство объявить наверное не проблема). За работоспособность не ручаюсь :( , т.к. сам не проверял.
Процедурка эта использовалась для реализации кнопки(унаследованной от TGraphicControl) с рисунком .
procedure drawcaption(fontcolor:TColor);
var RCap:Trect;
begin
if not FWordwrap
then
Rcap:=rect(FMarginHorizontal,0,width-MarginHorizontal,height)
else
RCap:=rect(FMarginHorizontal,FMarginvertical,
width-FMarginHorizontal,height-FMarginVertical);
canvas.brush.style:=bsclear;
canvas.font.color:=Fontcolor;
if not Fwordwrap
then begin
Rcap:=rect(FMarginHorizontal,0,
width-MarginHorizontal,height);
case Falignment of
taCenter:
DrawText(canvas.handle,@Caption[1],-1,Rcap, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
taLeftJustify:
DrawText(canvas.handle,@Caption[1],-1,Rcap, DT_SINGLELINE or DT_VCENTER or DT_LEFT);
taRightJustify:
DrawText(canvas.handle,@Caption[1],-1,Rcap, DT_SINGLELINE or DT_VCENTER or DT_RIGHT);
end;{of Case}
end
else begin // wordwrap
RCap:=rect(FMarginHorizontal,FMarginvertical,
width-FMarginHorizontal,height-FMarginVertical);
case Falignment of
taCenter:
DrawText(canvas.handle,@Caption[1],-1,Rcap, DT_VCENTER or DT_CENTER or DT_WORDBREAK);
taLeftJustify:
DrawText(canvas.handle,@Caption[1],-1,Rcap, DT_VCENTER or DT_LEFT or DT_WORDBREAK);
taRightJustify:
DrawText(canvas.handle,@Caption[1],-1,Rcap, DT_VCENTER or DT_RIGHT or DT_WORDBREAK);
end {of Case}
end;
end;
← →
KapitAl (2004-08-25 15:55) [2]Чуток опечатался. Первый if в процедуре лишний.
← →
iBitmap © (2004-08-25 17:21) [3]Спасибо. Только он не знает Wordwrap и ошибки выдает.
← →
iBitmap © (2004-08-25 17:29) [4]Я пробовал сделать Caption при помощи TextOut. Т.е. Canvas.TextOut({здесь нужно расчитать положение по X... (Не знаю точно, как сделать, чтобы всегда текст был по середине, как например в Button"е.}, {Здесь по Y}, Caption);
Все хорошо, текст появляется (почти по середине), но текст находится на белом фоне, т.е. текст появляется без Transparent. Как расчитать точно X и Y, чтобы разместитьтекст по середине и как тексту сделать Transparent background?
← →
KapitAl (2004-08-26 10:51) [5]Вот процедура для вывода текста по центру и с прозрачным фоном.
Для проверки кинь на форму Image и BitBtn. В обработчике OnClick у BitBtn размести эту процедуру. Скорее всего можно и покомпактнее написать. Я хотел показать сам принцип.
procedure TForm1.BitBtn1Click(Sender: TObject);
var
x,y:integer;
x1,y1:integer;
Str:string;
begin
str:="My text";
x:=Image1.Width;
y:=Image1.Height;
With Image1.Canvas do
begin
x1:=TextWidth(Str);
y1:=TextHeight(Str);
Brush.Style:=bsClear;//прозрачный фон для текста
x:=(x-x1) div 2;
y:=(y+y1) div 2;
TextOut(x,y,Str);
end;
end;
← →
KapitAl (2004-08-26 11:02) [6]По поводу WordWrap:
.....
published
property WordWrap:boolean read FWordWrap write SetWordWrap;
{Specifies whether the button text wraps when it is too long for the width of the button.}
implementation
procedure TMyButton.SetWordWrap(const Value: boolean);
begin
if value<>FWordWrap then
begin
FWordWrap := Value;
invalidate;
end;
end;
← →
iBitmap © (2004-08-26 11:19) [7]Спасибо. Я только немного поправил код, потому что текст выводился не посередине.
← →
KapitAl (2004-08-26 11:25) [8]You are welcome :)
Страницы: 1 вся ветка
Форум: "Компоненты";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.031 c