AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi auf nächsten buchstaben runden ?
Thema durchsuchen
Ansicht
Themen-Optionen

auf nächsten buchstaben runden ?

Ein Thema von mimi · begonnen am 23. Nov 2006 · letzter Beitrag vom 23. Nov 2006
Antwort Antwort
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
mimi

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

Re: auf nächsten buchstaben runden ?

  Alt 23. Nov 2006, 17:29
mit folgenden qullcode habe ich den ersten schrit geschaft:
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
// ShowMessage(IntTostr(v1.right) + '\' + IntTostr(x));
// sx:=x+v1.right;
// memo2.lines.add();
       caption:=IntTostr(v1.Right-x) ;
       sx:=x+(v1.Right-x);
// break;
      end;
    end;

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

  end;
end;
im moment muss ich noch y und mx und my anpassen aber ich denke das werde ich schaffen !!!
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz