Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.01.31;
Скачать: CL | DM;

Вниз

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

 
Леонид Артюхов   (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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.012 c
1-1234983949
alexis
2009-02-18 22:05
2010.01.31
перенаправить с одного порта на другой


2-1260353826
Б
2009-12-09 13:17
2010.01.31
Как возвести целое число в n-ую степень в Pascal?


11-1210873275
Vinum
2008-05-15 21:41
2010.01.31
Как у стринггриду запретить редактировать определенные ячейки


15-1259011816
Юрий
2009-11-24 00:30
2010.01.31
С днем рождения ! 24 ноября 2009 вторник


15-1259098216
Юрий
2009-11-25 00:30
2010.01.31
С днем рождения ! 25 ноября 2009 среда