probleme mit dem aussrechnen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

probleme mit dem aussrechnen

Beitrag von pluto »

Hallo,
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.

ps: da ihr immer meckert es würde nur schnisel gezeigt habe ich mal dem kompleten qullcode hochgeladen wobei lang ist er ja noch nicht *G*
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 !
MFG
Michael Springwald

Antworten