Форум: "Начинающим";
Текущий архив: 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