Помогите с написанием редактора
Мне надо написать текстовый редактор. С основными функциями я разобрался. Хотелось бы добавить нумерацию строк. Но ни как не могу написать чистый и рабочий код. Помогите ссылкой или куском года
Найди библиотеки готовых компонент. Например, пакет "SynEdit" - http://synedit.sourceforge.net/
Если подольше долбаться хочешь, то попробуй написать свой компонент.
Вот основная процедура:
procedure TMemo.WMPaint(var Message: TWMPaint);
var
PS :TPaintStruct;
DC :HDC;
Canvas :TCanvas;
i :Integer;
X,Y :Integer;
OldColor :TColor;
Size :TSize;
Max :Integer;
s, Palabra,
PrevWord : String;
selS,selL:integer;
begin
selS:=SelStart;
selL:=selLength;
DC := Message.DC;
if DC = 0 then DC := BeginPaint(Handle, PS);
Canvas:=TCanvas.Create;
try
OldColor := Font.Color;
Canvas.Handle:=DC;
Canvas.Font.Name :=Font.Name;
Canvas.Font.Size := Font.Size;
with Canvas do begin
Max := TopLine+VisibleLines;
if Max>Pred(Lines.Count)then Max := Pred(Lines.Count);
Brush.Color := Self.Color;
FillRect( Self.ClientRect );
Y:=1;
for i:=TopLine to Max do begin
X := 2;
s:=Lines;
Palabra := NextWord(s, PrevWord);
while Palabra<>'' do begin
if (prevword<>'') and IsSeparator(PrevWord[1]) then
font.Color:=clgreen
else Font.Color:=OldColor;
TextOut(X,Y, PrevWord);
GetTextExtentPoint32(DC, PChar(PrevWord), Length(PrevWord), Size);
Inc(X, Size.cx);
Font.Color:=clBlack;
if IsKeyWord(Palabra) then begin
Font.Color:=clHighlight;
TextOut(X,Y, Palabra);
end else
if IsNumber(Palabra) then begin
Font.Color:=$000000DD;
TextOut(X,Y, Palabra);
end else
if (prevword<>'') and IsSpecSeparator(prevword[length(prevword)]) then
begin
font.Color:=clred;
textout(x,y,Palabra);
end else
TextOut(X,Y, Palabra);
GetTextExtentPoint32(DC, PChar(Palabra), Length(Palabra), Size);
inc(X, Size.cx);
Palabra := NextWord(s, PrevWord);
if(s='')and(PrevWord<>'')then begin
if IsSeparator(PrevWord[1]) then
font.Color:=clgreen
else Font.Color:=OldColor;
TextOut(X,Y, PrevWord);
end;
end;
if(s='')and(PrevWord<>'')then begin
if IsSeparator(PrevWord[1]) then
font.Color:=clgreen
else Font.Color:=OldColor;
TextOut(X,Y, PrevWord);
end;
s:='W';
GetTextExtentPoint32(DC, PChar(s), Length(s), Size);
Inc(Y, Size.cy);
end;
end;
finally
if Message.DC = 0 then EndPaint(Handle, PS);
end;
Canvas.Free;
inherited;
end;
где здесь ощибка или что добавить?