![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как вывести на Канву, не затирая Картинку по дефолту?
Леонид Артюхов © (2009-12-08 10:18:00)Привет Мастера,
Вывожу текст в имадж:
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.
йцукен (2009-12-08 13:40:00) [1]
> 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;
Все работает.
Ганя (2009-12-08 13:29:00) [2]имхо, выводить графику в данном случае надо или через функции API, или через методы канваса, но ни в коем случае не вперемешку
Леонид Артюхов (2009-12-08 12:20:00) [3]
> Леонид Артюхов (08.12.09 12:15) [17]
И я поторопился, загрузил по дефолту не png а bmp и 3) тий код пошел!
brother (2009-12-08 12:17:00) [4]молодес ;) улыбнуло...
теперь понятно почему
> Хуже, не реализует!
но это твоя проблемма, и пока ты не разберешься в том, что (и зачем) я тебе написал - ничего не выйдет...
зы. удачи!
Леонид Артюхов (2009-12-08 12:15:00) [5]
> 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);
Леонид Артюхов (2009-12-08 12:13:00) [6]
> 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);
brother (2009-12-08 12:08:00) [7]показывай код, почему не реализует...
Леонид Артюхов (2009-12-08 12:07:00) [8]
> вот не люблю, когда не читают ответов... [8] [9] не подходит?
Хуже, не реализует!
brother (2009-12-08 11:46:00) [9]> [11] Леонид Артюхов (08.12.09 11:42)
>
> > йцукен (08.12.09 11:31) [10]
вот не люблю, когда не читают ответов... [8] [9] не подходит?
brother (2009-12-08 11:45:00) [10]> Во первый долой Image1.Picture := nil;
тогда уж:
Image1.Picture.Bitmap.FreeImage;
я так понимаю: этим автор хотел очистить имадж?
Леонид Артюхов (2009-12-08 11:42:00) [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)
йцукен (2009-12-08 11:31:00) [12]
> Леонид Артюхов (08.12.09 11:07) [4]
Сорри, я тоже поторопился =(
Во первый долой Image1.Picture := nil;
Затем после Windows.DrawText поставь Image1.Refresh;
Еще раз сорри.
brother (2009-12-08 11:26:00) [13]begin
//Выставляем цвет текста
Image1.Picture.Bitmap.Canvas.Font.Color := clBlue;
//Выставляем прозрачную закраску
Image1.Picture.Bitmap.Canvas.Brush.Style:=bsClear;
Image1.Picture.Bitmap.Canvas.TextOut(1, 1, ?Прозрачная надпись?);
brother (2009-12-08 11:18:00) [14]рисуй не так:
> 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
Леонид Артюхов (2009-12-08 11:15:00) [15]
> ручками напиши и все...
[DCC Error] _FrmImage.pas(46): E2010 Incompatible types: 'TBrushStyle' and 'TFormBorderStyle'
brother (2009-12-08 11:14:00) [16]эээ, однако я поторопился...
brother (2009-12-08 11:12:00) [17]я не знаю, что там в 2009... ручками напиши и все...
Леонид Артюхов (2009-12-08 11:07:00) [18]
> йцукен (08.12.09 10:53) [3]
http://pic.ipicture.ru/uploads/091208/5rJitT1lRV.jpg
йцукен (2009-12-08 10:53:00) [19]
> Леонид Артюхов (08.12.09 10:46) [2]
> Image1.Canvas.Brush.Style := bsNone; - нет в D2009
Больно слышать (с) ИШ
Леонид Артюхов (2009-12-08 10:46:00) [20]
> brother ©
Image1.Canvas.Brush.Style := bsNone; - нет в D2009