![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Добавить свойство Caption. [D7, WinXP]
iBitmap © (2004-08-25 14:37:00)Доброе время суток!
Как компоненту добавить свойство Caption, если компонент основан на TImage (т.е. его родитель TImage). Нужно чтобы Caption писалось поверх изображения (как у Button). Напишите пожалуйста отрывок кода.
KapitAl (2004-08-26 11:25:00) [1]You are welcome :)
iBitmap (2004-08-26 11:19:00) [2]Спасибо. Я только немного поправил код, потому что текст выводился не посередине.
KapitAl (2004-08-26 11:02:00) [3]По поводу WordWrap:
.....
published
propertyWordWrap:boolean readFWordWrap writeSetWordWrap;
{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;
KapitAl (2004-08-26 10:51:00) [4]Вот процедура для вывода текста по центру и с прозрачным фоном.
Для проверки кинь на форму 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;
iBitmap (2004-08-25 17:29:00) [5]Я пробовал сделать Caption при помощи TextOut. Т.е. Canvas.TextOut({здесь нужно расчитать положение по X... (Не знаю точно, как сделать, чтобы всегда текст был по середине, как например в Button'е.}, {Здесь по Y}, Caption);
Все хорошо, текст появляется (почти по середине), но текст находится на белом фоне, т.е. текст появляется без Transparent. Как расчитать точно X и Y, чтобы разместитьтекст по середине и как тексту сделать Transparent background?
iBitmap (2004-08-25 17:21:00) [6]Спасибо. Только он не знает Wordwrap и ошибки выдает.
KapitAl (2004-08-25 15:55:00) [7]Чуток опечатался. Первый if в процедуре лишний.
KapitAl (2004-08-25 15:52:00) [8]Возможно подойдет эта процедура. Перекрывай 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;