Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Paintbox1.Canvas.TextOut (https://www.delphipraxis.net/46753-paintbox1-canvas-textout.html)

KOTRET 30. Mai 2005 22:31


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:
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;
Findet hier irgendjemand nen Grund warum das so ist? :roll:

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

supermuckl 31. Mai 2005 01:17

Re: Paintbox1.Canvas.TextOut
 
probiers mal mit paintbox.repaint;

Luckie 31. Mai 2005 03:43

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: http://www.luckie-online.de/Delphi/Programme/ -> SchrägerWurf (Und alles sauber in eine Klasse gepackt.)

toms 31. Mai 2005 04:29

Re: Paintbox1.Canvas.TextOut
 
Zitat:

Zitat von Luckie
komplexes Beispiel: http://www.luckie-online.de/Delphi/Programme/ -> SchrägerWurf

Bei mir kommt ein " '9,81' ist kein gültiger Gleitkommawert. " bei Klick auf Zeichnen.
Das liegt daran, dass bei mir im System das Dezimaltrennzeichen ein Punkt ist und kein Komma.

Luckie 31. Mai 2005 04:37

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.

KOTRET 1. Jun 2005 18:25

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?

alzaimar 1. Jun 2005 18:29

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.

KOTRET 4. Jun 2005 14:20

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