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

Вниз

Вывод текста с обводкой букв.   Найти похожие ветки 

 
sergn   (2002-12-19 21:12) [0]

Как можно быстро вывести на HDC текст с обводкой букв линией
заданой толщины и цвета.
Есть следующий вариант, но он неприемлимо тормознутый.

Procedure TTextDrawObject.DrawTextOutLine(a_dc: Hdc; a_Pen: hPen; a_x, a_y: integer; a_string:string);
var
oldpen:HPEN;
begin
oldPen := SelectObject(a_dc, a_Pen);
BeginPath(a_dc);
TextOut(a_dc, a_x, a_y, Pchar(a_string), length(a_string));
EndPath(a_dc);
StrokePath(a_dc);
SelectObject(a_dc, oldPen);
end;


 
Mihey   (2002-12-19 23:41) [1]

Самое простое - обвести текст как изображение. У меня есть такой пример. В нём можно нарисовать что-нить, а потом программа делает контур фигуры:

unit main_u;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls;

type
Tmain = class(TForm)
DrwPanel: TPanel;
ButtonConture: TButton;
ButtonClear: TButton;
DrwBox: TPaintBox;
procedure DrwBoxMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure DrwBoxMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure DrwBoxMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure ButtonClearClick(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure DrwBoxPaint(Sender: TObject);
procedure ButtonContureClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
main: Tmain;
Pressed: Boolean=False;

implementation

{$R *.DFM}

procedure Tmain.DrwBoxMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Pressed := True;
DrwBox.Canvas.MoveTo(X, Y);
DrwBox.Canvas.LineTo(X, Y);
end;

procedure Tmain.DrwBoxMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Pressed := False;
end;

procedure Tmain.DrwBoxMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
If Pressed then
DrwBox.Canvas.LineTo(X, Y);
end;

procedure Tmain.ButtonClearClick(Sender: TObject);
var Box: TRect;
begin
With DrwBox do
begin
Box := Rect(0, 0, Width-1, Height-1);
Canvas.Brush.Style := bsSolid;
Canvas.Brush.Color := clWhite;
Canvas.FillRect(Box);
end;
end;

procedure Tmain.FormPaint(Sender: TObject);
begin
With DrwBox do
begin
Canvas.Pen.Style := psSolid;
Canvas.Pen.Color := clBlack;
Canvas.Pen.Width := 10;
end;
end;

procedure Tmain.DrwBoxPaint(Sender: TObject);
var Box: TRect;
begin
With DrwBox do
begin
Box := Rect(0, 0, Width-1, Height-1);
Canvas.Brush.Style := bsSolid;
Canvas.Brush.Color := clWhite;
Canvas.FillRect(Box);
end;
end;

procedure Tmain.ButtonContureClick(Sender: TObject);
var x, y: Integer;
begin
With DrwBox do
begin
For y := 0 to Height-1 do
For x := 0 to Width-1 do
begin
If Canvas.Pixels[x, y] = clWhite then
begin
If Canvas.Pixels[x, y+1] = clBlack then
Canvas.Pixels[x, y+1] := clRed;
If Canvas.Pixels[x, y-1] = clBlack then
Canvas.Pixels[x, y-1] := clRed;
If Canvas.Pixels[x, y] = clBlack then
Canvas.Pixels[x, y] := clRed;
If Canvas.Pixels[x+1, y] = clBlack then
Canvas.Pixels[x+1, y] := clRed;
If Canvas.Pixels[x-1, y] = clBlack then
Canvas.Pixels[x-1, y] := clRed;
If Canvas.Pixels[x, y] = clBlack then
Canvas.Pixels[x, y] := clRed;
end;
end;
end;
end;

end.

Программа довольно быстро работает с малыми изображениями. Если заменить Pixels на ScanLine, то получится ещё быстрее.



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

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

Наверх




Память: 0.45 MB
Время: 0.007 c
6-88124
3d[Power]
2003-01-23 08:04
2003.03.27
Sockets, winsock.pas


14-88187
Diamond
2003-03-11 01:41
2003.03.27
Как правильно нумеровать версию программы???


3-87792
AleksandrKu
2003-03-07 14:01
2003.03.27
поможите люди добри как Stored процедурку написать


14-88244
RV
2003-03-12 12:02
2003.03.27
Вода течет...


1-87947
D_Erlan
2003-03-17 16:14
2003.03.27
Hint





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