ich habe heute(bzw. gestern) angefangen ein memo zu schreibe es läuft auch ganz gut...
das prinzip ist folgendes:
ich habe eine inputStringlist in diese TStringlist wird soblt ich auf eine Taste drücke geschrieben es werden immomet nur die buchstaben(klein und groß) unterstützt so.....
das problem ist jetzt mit dem Cuser ich habe mir gedacht ich zeichne einfach eine line vertikal kein problem - geht auch - sobalt ich jetzt aber die zeile erhöhe also bis zum rand schreibe so das eine neue zeile angefangen habe und das mehrmals mache .... ist der cuser in y richtig überall mal über der aktuelle zeile mal draunter oder nur halb drauf ! ich schreibe immer nur klein zum testen.
hier mal mein bishieriger qullcode:
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls,Tools,lcltype;
type
{ TForm1 }
TForm1 = class(TForm)
PaintBox1: TPaintBox;
procedure FormCreate(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormKeyPress(Sender: TObject; var Key: char);
procedure PaintBox1Paint(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
TextInput:TStringList;
buffer:TBitMap;
CT:TPoint;
zi:integer = 0;
ox:Integer = 0;
start:Boolean = false;
implementation
{ TForm1 }
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
TextRect:Trect;
begin
TextRect.left:=0; TextRect.top:=0; TextRect.Right:=paintbox1.Width;
TextRect.Bottom:=paintbox1.Height;
buffer.canvas.FillRect(TextRect);
buffer.canvas.TextStyle.Wordbreak:=False;
buffer.canvas.TextRect(TextRect,0,0,TextInput.text);
zi:=((buffer.canvas.Font.GetTextHeight('a')) * (ct.y))+15;
// caption:=IntTostr( );
buffer.canvas.pen.color:=clred;
buffer.canvas.moveto(ct.x,zi );
buffer.canvas.LineTo(ct.x,zi+15);
Paintbox1.Canvas.CopyRect(TextRect,buffer.canvas,TextRect)
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
TextInput:=TStringList.Create;
TextInput.add('');
buffer:=TBitMap.Create;
ct.x:=0; ct.y:=0;
buffer.Width:=Paintbox1.Width; buffer.Height:=Paintbox1.Height;
buffer.Canvas.FillRect(buffer.canvas.ClipRect);
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
);
begin
if (key in [ord('A')..ord('Z')]) or (Key in [ord('a')..ord('z')]) or (shift <> []) or (key = VK_SPACE) then begin
start:=True;
end;
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: char);
begin
if start = true then begin
ox:=ct.x;
if ct.x >=paintbox1.Width then begin
ct.x:=0;inc(ct.y);
// inc(,);
if ct.y >= Textinput.count-1 then begin
Textinput.add('');
end;
end;
TextInput.Strings[ct.y]:=TextInput.Strings[ct.y]+Key;
inc(ct.X,buffer.canvas.TextWidth(key));
PaintBox1Paint(sender);
start:=False;
end;
end;
initialization
{$I Unit1.lrs}
end.
ich dachte ich könnte die cuser position einfach aussrechnen in Y richtung aber das geht anscheindn nicht !
Kann mir da wer weiterhelfen ?
achja das ziel ist es draus eine "art" rtf komponente irgenwan zu machen !