Главная страница
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.052 c
14-1122508959
vidiv
2005-07-28 04:02
2005.08.21
Ктонибудь настраивал SSL на Apache2 под Windows?


1-1122932043
Ке
2005-08-02 01:34
2005.08.21
Почему в хинте нельзя отобразить "|" ?


14-1122905798
Santrope
2005-08-01 18:16
2005.08.21
Откуда скачать HotFix ы для WIn2003 Server???


4-1120277989
Kerk
2005-07-02 08:19
2005.08.21
Хендл окна при WH_KEYBOARD_LL


3-1121244254
Ирина
2005-07-13 12:44
2005.08.21
DBEdit