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

Вниз

Добавить свойство 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.048 c
5-1093243898
Mr.Den
2004-08-23 10:51
2005.08.21
Глючит Ttimer в самописном компоненте


11-1105547544
Seeker
2005-01-12 19:32
2005.08.21
KOLScktComp


1-1122683948
Alexandr+
2005-07-30 04:39
2005.08.21
Как самое простое преобразовать Хтмл в чистый текст?


14-1122640053
NeMaster
2005-07-29 16:27
2005.08.21
как двигать мышь


8-1113485801
vayrus
2005-04-14 17:36
2005.08.21
Windows.Beep