Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Страницы:   1 2

Леонид Артюхов ©   (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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо