Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 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
3-1121166891
Ирина
2005-07-12 15:14
2005.08.21
Сортировка


14-1122694770
Vlad Oshin
2005-07-30 07:39
2005.08.21
наше дело правое Мы победим иеще г.СталинИВ изображен


1-1123017490
iskatel
2005-08-03 01:18
2005.08.21
прокси, попытка 2 ))


14-1119676221
cyborg
2005-06-25 09:10
2005.08.21
Ламповый автомобильный CD-ресивер


1-1122828349
Destroyer
2005-07-31 20:45
2005.08.21
Вопрос по try ... except





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский