![]() |
Paintbox1.Canvas.TextOut
Hi Leute!
:arrow: Folgendes Problem: Auf Knopfdruck soll eine Paintbox (bereits mit einer Skala und Hilfslinien versehen) mit passenden Werten an den Achsen beschriftet werden. Das dumme ist, dass dies erst passiert (zumindest optisch), wenn man den Button 2 mal drückt, beim ersten Mal tut sich einfach nix...
Delphi-Quellcode:
Findet hier irgendjemand nen Grund warum das so ist? :roll:
procedure TForm1.Button1Click(Sender: TObject);
const g=9.81; var hoehe,xt,t,v:Real; n:Integer; sknum:string; begin hoehe:=StrToFloat(Edit1.text); v:=StrToFloat(Edit2.text); t:=sqrt(2*hoehe/g); // Flugzeit xt:=v*t; // Flugweite // yt:=(-g/2)*sqr(t))+hoehe; for n:=1 to 11 do begin if xt<11 then sknum:=FloatToStrF(((xt/510)*(n*45)),ffFixed,1,1); if xt<1 then sknum:=FloatToStrF(((xt/510)*(n*45)),ffFixed,1,2) else sknum:=FloatToStr(round((xt/510)*(n*45))); Form1.Paintbox1.Canvas.TextOut((n*45+30)-8,332,sknum); end; Label5.caption:='Flugweite: '+FloatToStr(xt)+' m'; Label8.Caption:='Flugzeit: '+FloatToStr(t)+' s'; end; Die Paintbox wird gleich beim Start des Programms gezeichnet, die Werte aber erst auf Knopfdruck ausgegeben (solln sich nach den eingetippten Werten (hoehe und v) richten Gruß, KOTRET |
Re: Paintbox1.Canvas.TextOut
probiers mal mit paintbox.repaint;
|
Re: Paintbox1.Canvas.TextOut
Also bei mir werden die Werte sofort ausgegeben.
Kleiner Tipp: Zeichne auf ein Bitmap im Speicher und kopier es bei Bedarf auf den Canvas der Paintbox. Etwas komplexes Beispiel: ![]() |
Re: Paintbox1.Canvas.TextOut
Zitat:
Das liegt daran, dass bei mir im System das Dezimaltrennzeichen ein Punkt ist und kein Komma. |
Re: Paintbox1.Canvas.TextOut
Hmpf. War ja nur eine Demo und dafür gedacht etwas mit Klassen zu arbeiten. Jetzt sollte es gehen. Eingeben kannst du dort sowieso nur den eingestellten Dezimalseparator.
|
Re: Paintbox1.Canvas.TextOut
ich wills nicht allzu komlex machen, bin nur Anfänger ;) bei paintbox1.repaint werden die Werte garnicht angezeigt, wenn ich das Repaint als letzte Aktion vorm end; mache, wenn ichs an den Anfang der Procedure stelle ists der gleiche Fall wie vorher...
mhm, wenns bei euch gehen sollte, ist dann vielleicht ne Einstellung am Compiler oder direkt in Delphi schuld? |
Re: Paintbox1.Canvas.TextOut
Bei Paintbox war es doch so, das man das OnPaint Ereignis überschreiben muss, damit da was gezeichnet wird.
Nimm anstelle einer Paintbox doch einfach ein TPanel. Das hat auch ein Canvas. |
Re: Paintbox1.Canvas.TextOut
hab den Fehler gefunden:
sobald sich was in der Paintbox ändert, tritt OnPaint inkraft. In der Form1.OnPaint-Routine hatte ich reingeschrieben, dass ein Rechteck weiß gezeichnet werden soll, danach kamen die Hilfslinien für das Diagramm. Also wurde die Skala "übermalt". Wieso die aber bei 2maligem drücken dann wieder sichtbar war ist mir nen Rätsel :) hab jetzt einfach nen weißen Hintergrund statt rect genommen ^^ Danke für alle Lösungsvorschläge :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz