Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.01.31;
Скачать: [xml.tar.bz2];

Вниз

Как вывести на Канву, не затирая Картинку по дефолту?   Найти похожие ветки 

 
Леонид Артюхов   (2009-12-08 10:18) [0]

Привет Мастера,
Вывожу текст в имадж:
var
_Font: String;
...

var
 _Rectangle: TRect;
begin
 Image1.Picture := nil;
 _Rectangle := Image1.Canvas.ClipRect;
 Image1.Canvas.Font.Name := _Font;
 Image1.Canvas.Font.Color := clGreen;
 Image1.Canvas.Brush.Style := bsClear;
 Windows.DrawText(Image1.Canvas.Handle, PChar(Memo1.Text), -1,
   _Rectangle, DT_WORDBREAK + (DT_RASCAMERA) + DT_WORD_ELLIPSIS);
end;
...
procedure TForm1.Button2Click(Sender: TObject);
begin
 If not SavePictureDialog1.Execute then exit;
 Image1.Picture.Graphic.SaveToFile(SavePictureDialog1.Filename);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 if not FontDialog1.Execute then exit;
 _Font := FontDialog1.Font.Name;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Image1.Parent.DoubleBuffered := true;
end;


Вопрос:
Как выводить текст не затирая Картинку по умолчанию в TImage.


 
brother ©   (2009-12-08 10:22) [1]

Image1.Canvas.Brush.Style := bsNone;
оно?


 
Леонид Артюхов   (2009-12-08 10:46) [2]


> brother ©

Image1.Canvas.Brush.Style := bsNone; - нет в D2009


 
йцукен   (2009-12-08 10:53) [3]


> Леонид Артюхов   (08.12.09 10:46) [2]
> Image1.Canvas.Brush.Style := bsNone; - нет в D2009

Больно слышать (с) ИШ


 
Леонид Артюхов   (2009-12-08 11:07) [4]


> йцукен   (08.12.09 10:53) [3]


http://pic.ipicture.ru/uploads/091208/5rJitT1lRV.jpg


 
brother ©   (2009-12-08 11:12) [5]

я не знаю, что там в 2009... ручками напиши и все...


 
brother ©   (2009-12-08 11:14) [6]

эээ, однако я поторопился...


 
Леонид Артюхов   (2009-12-08 11:15) [7]


> ручками напиши и все...


[DCC Error] _FrmImage.pas(46): E2010 Incompatible types: "TBrushStyle" and "TFormBorderStyle"


 
brother ©   (2009-12-08 11:18) [8]

рисуй не так:
> Windows.DrawText(Image1.Canvas.Handle, PChar(Memo1.Text)
> , -1,
>   _Rectangle, DT_WORDBREAK + (DT_RASCAMERA) + DT_WORD_ELLIPSIS)
> ;

а через TextOut:
http://www.cyberguru.ru/delphi-sources/ui-drawing-pics/kak-s-pomoschyu-funktsii-textout-vyvesti-na-kanve-prozratchnyj-tekst.html


 
brother ©   (2009-12-08 11:26) [9]

begin
//Выставляем цвет текста
Image1.Picture.Bitmap.Canvas.Font.Color := clBlue;
//Выставляем прозрачную закраску
Image1.Picture.Bitmap.Canvas.Brush.Style:=bsClear;
Image1.Picture.Bitmap.Canvas.TextOut(1, 1, ?Прозрачная надпись?);


 
йцукен   (2009-12-08 11:31) [10]


> Леонид Артюхов   (08.12.09 11:07) [4]

Сорри, я тоже поторопился =(

Во первый долой Image1.Picture := nil;
Затем после Windows.DrawText поставь Image1.Refresh;

Еще раз сорри.


 
Леонид Артюхов   (2009-12-08 11:42) [11]


> йцукен   (08.12.09 11:31) [10]


First chance exception at $7C812AFB. Exception class EInvalidOperation with message "Can only modify an image if it contains a bitmap". Process TextInImage.exe (3104)


 
brother ©   (2009-12-08 11:45) [12]

> Во первый долой Image1.Picture := nil;

тогда уж:
 Image1.Picture.Bitmap.FreeImage;
я так понимаю: этим автор хотел очистить имадж?


 
brother ©   (2009-12-08 11:46) [13]

> [11] Леонид Артюхов   (08.12.09 11:42)
>
> > йцукен   (08.12.09 11:31) [10]

вот не люблю, когда не читают ответов... [8] [9] не подходит?


 
Леонид Артюхов   (2009-12-08 12:07) [14]


> вот не люблю, когда не читают ответов... [8] [9] не подходит?


Хуже, не реализует!


 
brother ©   (2009-12-08 12:08) [15]

показывай код, почему не реализует...


 
Леонид Артюхов   (2009-12-08 12:13) [16]


> brother ©   (08.12.09 12:08) [15]


1)
 Image1.Picture.Bitmap.FreeImage;
 _Rectangle := Image1.Canvas.ClipRect;
 Image1.Canvas.Font.Name := _Font;
 Image1.Canvas.Font.Size := _Size;
 Image1.Canvas.Font.Color := clGreen;
 Image1.Canvas.Brush.Style := (bsClear);
 Windows.DrawText(Image1.Canvas.Handle, PChar(Memo1.Text), -1,
   _Rectangle, DT_WORDBREAK + DT_CENTER + DT_WORD_ELLIPSIS);
 Image1.Refresh;

2)
 //Выставляем цвет текста
 Image1.Picture.Bitmap.Canvas.Font.Color := clBlue;
 //Выставляем прозрачную закраску
 Image1.Picture.Bitmap.Canvas.Brush.Style:=bsClear;
 Image1.Picture.Bitmap.Canvas.TextOut(1, 1, Memo1.Text);


 
Леонид Артюхов   (2009-12-08 12:15) [17]


> brother ©   (08.12.09 12:08) [15]

3) Тоже не фига...
var
       OldBkMode : integer;
begin
       Image1.Picture.Bitmap.Canvas.Font.Color := clBlue;
       OldBkMode := SetBkMode(Image1.Picture.Bitmap.Canvas.Handle,TRANSPARENT);
       Image1.Picture.Bitmap.Canvas.TextOut(10, 10, "Hello");
       SetBkMode(Image1.Picture.Bitmap.Canvas.Handle,OldBkMode);


 
brother ©   (2009-12-08 12:17) [18]

молодес ;) улыбнуло...
теперь понятно почему

> Хуже, не реализует!

но это твоя проблемма, и пока ты не разберешься в том, что (и зачем) я тебе написал - ничего не выйдет...
зы. удачи!


 
Леонид Артюхов   (2009-12-08 12:20) [19]


> Леонид Артюхов   (08.12.09 12:15) [17]


И я поторопился, загрузил по дефолту не png а bmp  и 3) тий код пошел!


 
Ганя   (2009-12-08 13:29) [20]

имхо, выводить графику в данном случае надо или через функции API, или через методы канваса, но ни в коем случае не вперемешку


 
йцукен   (2009-12-08 13:40) [21]


> brother ©   (08.12.09 11:46) [13]
> вот не люблю, когда не читают ответов... [8] [9] не подходит?

Да ладно, не нервничай ;)
Судя по коду из [0] не подходит. Отсутствует форматирование, которое обеспечивается флагами. Поэтому я и не предложил метод канвы.


> Леонид Артюхов   (08.12.09 11:42) [11]

У меня все работает.
На форме имадж, в нем картинка. Затем
procedure TForm1.Button1Click(Sender: TObject);
var
_Rectangle: TRect;
begin
_Rectangle := Image1.Canvas.ClipRect;
Image1.Canvas.Font.Color := clWhite;
Image1.Canvas.Brush.Style := bsClear;
DrawText(Image1.Canvas.Handle, PChar(Memo1.Text), -1, _Rectangle,
 DT_WORDBREAK + (DT_RASCAMERA) + DT_WORD_ELLIPSIS);
Image1.Refresh;
end;

Все работает.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2010.01.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.005 c
1-1229112643
ivak
2008-12-12 23:10
2010.01.31
Собственный курсор


1-1234983949
alexis
2009-02-18 22:05
2010.01.31
перенаправить с одного порта на другой


15-1259282883
Дмитрий С
2009-11-27 03:48
2010.01.31
Вопрос по настройке DNS


2-1260335500
ArtemSTR
2009-12-09 08:11
2010.01.31
Нужна помощь


15-1259206910
koha!
2009-11-26 06:41
2010.01.31
Что лучше?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский