Hej.
Jeg er i gang med at lave en editor, og jeg vil gerne have, at den skal tælle linierne ude til venstre (ligesom WebCoder). Men jeg må indrømme, jeg ikke rigtigt kan finde ud af det. Lige nu ser det helt håbløst ud, men det er bare fordi jeg prøver mig frem. Jeg kan godt få den til at tælle et tal, men hvis man bruger min metode siger den bagefter noget med:
'1
2' er ikke et gyldigt tal
... og det er jo selvfølgelig rigtigt.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, ComCtrls, ToolWin, ExtCtrls, Registry;
type
TForm1 = class(TForm)
editor: TRichEdit;
// Menuen
hovedmenu: TMainMenu;
filer: TMenuItem;
formater: TMenuItem;
// Formater
skrifttype: TMenuItem;
tekstombryd: TMenuItem;
fontdialog: TFontDialog;
justering: TMenuItem;
// Gem/Åben
gem: TMenuItem;
gemdialog: TSaveDialog;
aaben: TMenuItem;
hentdialog: TOpenDialog;
// Andet
linier: TLabel;
finddialog: TFindDialog;
// Procedurer
procedure gemdokument(Sender: TObject); // Gem dokument
procedure hentdokument(Sender: TObject); // Åben dokumenter
procedure fontprocedure(Sender: TObject); // Skrifttype dialog
procedure tekstombrydning(Sender: TObject); // Syntaks farvning
procedure syntaksfarv(Sender: TObject);
procedure centrering(Sender: TObject);
procedure find(Sender: TObject);
procedure farvalt(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
fontprocedure: TColorDialog;
i: integer;
laengde: integer;
minus: integer;
plus: integer;
implementation
procedure TForm1.gemdokument(Sender: TObject); // Så man kan gemme dokumentet
begin
if gemdialog.Execute then
begin
editor.Lines.SaveToFile(gemdialog.FileName);
end;
end;
procedure TForm1.hentdokument(Sender: TObject); // Så man kan åbne dokumenter
var laengde, i: integer;
begin
if hentdialog.Execute then
begin
editor.Lines.LoadFromFile(hentdialog.FileName);
laengde := Length(editor.Text);
i := 1;
while (i <= laengde) do
begin
if editor.SelStart = 0 then editor.SelStart := 1;
if editor.Text[i] = '<' then
begin
editor.SelStart := i-1;
editor.SelLength := 1;
editor.SelAttributes.Color := clBlack;
editor.SelStart := i;
editor.SelLength := Length(editor.Text);
editor.SelAttributes.Color := clTeal;
end;
if editor.Text[i] = '>' then
begin
editor.SelStart := i-1;
editor.SelLength := 1;
editor.SelAttributes.Color := clBlack;
end;
if editor.Text[i] = ' ' then
begin
if editor.SelAttributes.Color = clTeal then
begin
editor.SelStart := i;
editor.SelLength := Length(editor.Text);
editor.SelAttributes.Color := clGreen;
end;
end;
if editor.Text[i] = '"' then
begin
if editor.SelAttributes.Color = clGreen then
begin
editor.SelStart := i;
editor.SelLength := Length(editor.Text);
editor.SelAttributes.Color := clRed;
end;
end;
Inc(i);
end;
end;
end;
procedure TForm1.fontprocedure(Sender: TObject); // Skrifttype procedure
begin
if fontdialog.Execute then
begin
editor.SelAttributes.Color := fontdialog.Font.Color;
editor.SelAttributes.Name := fontdialog.Font.Name;
editor.SelAttributes.Style := fontdialog.Font.Style;
editor.SelAttributes.Size := fontdialog.Font.Size;
end;
end;
procedure TForm1.tekstombrydning(Sender: TObject); // Tekstombrydning
begin
if editor.WordWrap = true then
begin
editor.WordWrap := false;
tekstombryd.Checked := false;
editor.ScrollBars := ssVertical;
end
else
begin
editor.WordWrap := true;
tekstombryd.Checked := true;
editor.ScrollBars := ssBoth;
end;
end;
procedure TForm1.syntaksfarv(Sender: TObject);
begin
if Copy(editor.Text, Length(editor.Text)-3, Length(editor.Text)) = #10 then
linier.Caption := linier.Caption + IntToStr(editor.Lines.Count) + #10;
if Length(editor.Text) = 0 then
begin
editor.SelStart := 1;
editor.SelAttributes.Color := clBlack;
editor.SelAttributes.Style := [];
exit;
end;
// Kommentarer start
if Copy(editor.Text, editor.SelStart-3, editor.SelStart) = '<!--' then
begin
editor.SelStart := editor.SelStart - 4;
editor.SelLength := 4;
editor.SelAttributes.Style := [fsItalic];
editor.SelAttributes.Color := clGray;
editor.SelStart := editor.SelStart + 4;
end;
// Kommentarer slut
if Copy(editor.Text, editor.SelStart-2, editor.SelStart) = '-->' then
begin
if editor.SelAttributes.Style = [fsItalic] then
begin
editor.SelStart := editor.SelStart - 1;
editor.SelLength := 1;
editor.SelAttributes.Style := [];
editor.SelAttributes.Color := clBlack;
editor.SelStart := editor.SelStart + 1;
end;
end;
if editor.Text[editor.SelStart] = '<' then
begin
if editor.SelAttributes.Style = [] then
editor.SelAttributes.Color := clTeal;
end;
if editor.Text[editor.SelStart] = '>' then
begin
if editor.SelAttributes.Style = [] then
begin
editor.SelStart := editor.SelStart - 1;
editor.SelLength := 1;
editor.SelAttributes.Color := clBlack;
editor.SelStart := editor.SelStart + 1;
editor.SelLength := 0;
end;
end;
if editor.Text[editor.SelStart] = ' ' then
begin
if editor.SelAttributes.Color = clTeal then
begin
editor.SelAttributes.Color := clGreen;
end;
end;
if editor.Text[editor.SelStart] = '"' then
begin
if editor.SelAttributes.Style = [] then
begin
if editor.SelAttributes.Color = clRed then
begin
editor.SelAttributes.Color := clBlack;
end
else
begin
editor.SelStart := editor.SelStart - 1;
editor.SelLength := 1;
editor.SelAttributes.Color := clRed;
editor.SelStart := editor.SelStart + 1;
end;
end;
end;
end;
procedure TForm1.centrering(Sender: TObject);
var
starttag, sluttag: string;
begin
starttag := '<center>';
sluttag := '</center>';
editor.SelText := starttag + editor.SelText + sluttag
end;
procedure TForm1.farvalt(Sender: TObject);
var laengde, i: integer;
begin
laengde := Length(editor.Text);
i := 0;
while (i < laengde) do
begin
if editor.Text[i-1] = '<' then
begin
editor.SelStart := i;
editor.SelAttributes.Color := clTeal;
end;
Inc(i);
end;
end;
procedure TForm1.find(Sender: TObject);
begin
if (finddialog.Execute) then
begin
editor.SetFocus;
if finddialog.FindText = '' then exit;
if Pos(finddialog.FindText, editor.Text) > 0 then
ShowMessage('Teksten blev fundet')
else
ShowMessage('Teksten blev ikke fundet');
end;
end;
{$R *.dfm}
end.
Jeg ved godt, der er mange procedurer som ikke virker, bl. a. 'find', men dem bedes I ikke kommentere