Einzelnen Beitrag anzeigen

mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#1

auf nächsten buchstaben runden ?

  Alt 23. Nov 2006, 16:50
Hallo,
ich lese einen text in eine TList ein und zeichne ihn.
Jetzt zeichne ich ein makierungs rechteck, da jedes zeichnen ein vireck ist prüfe ich nur noch nach welche obj. in den makierungs fehld liegt.

das klappt auch wunderbar nur bis auf einen schönheits fehler.
Ich würde gerne nur ganze buchstaben makieren und keine halben.
ich hoffe ihr könnt es nachvollzien was ich vorhabe.
ich habe hier einen qullcode geschrieben der leider nicht funktioniert !

mein zile ist es auf ein ganzen buchstaben zu runden bzw. obj.
mein qullcode:
Delphi-Quellcode:
procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  sx,sy,i:Integer;
  v,v1,v2:TRect;
begin
  if ssLeft in shift then begin
    bufbmp.Canvas.pen:=oldpen;
    bufbmp.Canvas.Brush:=oldBrush;
  
    bufbmp.Canvas.Brush.color:=clBlack;
    bufbmp.Canvas.Brush.Style:=bsSolid;
    bufbmp.Canvas.Rectangle(0,0,paintbox1.Width,paintbox1.Height);
    bufbmp.Canvas.Brush:=oldBrush;
    bufbmp.Canvas.Pen:=oldPen;
    bufbmp.Canvas.pen.color:=clAqua;

    for i:=0 to obj.count-1 do begin
      v1.left:=tCharItem(obj.items[i]).cx;
      v1.top:=tCharItem(obj.items[i]).cy;
      v1.Right:=v1.left+bufbmp.Canvas.TextWidth(tCharItem(obj.items[i]).Char);
      v1.Bottom:=v1.top+bufbmp.Canvas.TextHeight(tCharItem(obj.items[i]).Char);

      v2.left:=mx;
      v2.top:=my;
      v2.Right:=x;
      v2.Bottom:=y;

      if IntersectRect(v,v2,v1) = True then begin
        sx:=x+(v1.right-v1.left)+v.Left;
        break;
      end;
    end;
    caption:=IntTostr(sx);

    bufbmp.canvas.Rectangle(mx,my,sx,y);
    bufbmp.Canvas.Brush:=oldBrush;
    bufbmp.Canvas.Pen:=oldPen;
    DrawText;

  end;
end;

procedure TForm1.PaintBox1MouseUp(Sender: TOBject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  i,m:integer;
  v,v1,v2:TRect;
  

begin
  for i:=0 to obj.count-1 do begin
      v1.left:=tCharItem(obj.items[i]).cx;
      v1.top:=tCharItem(obj.items[i]).cy;
      v1.Right:=v1.left+bufbmp.Canvas.TextWidth(tCharItem(obj.items[i]).Char);
      v1.Bottom:=v1.top+bufbmp.Canvas.TextHeight(tCharItem(obj.items[i]).Char);

      v2.left:=mx;
      v2.top:=my;
      v2.Right:=x;
      v2.Bottom:=y;

      if IntersectRect(v,v2,v1) = True then begin
        if ord(tCharItem(obj.items[i]).Char) = 0 then
          memo2.lines.add(#13#10);
          
        if (Memo2.Lines.Count = 0)then
          Memo2.Lines.Add(tCharItem(obj.items[i]).Char)
        else
          Memo2.Lines.Strings[Memo2.Lines.Count-1]:=Memo2.Lines.Strings[Memo2.Lines.Count-1]+tCharItem(obj.items[i]).Char ;
      end;
    end;
end;
in mousemove wird das rechteck gezeichnet und in mouseup wird endschieden was der user makiert hat !

vielen dank im voraus !
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat