Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Canvas zeichnet bei Integer, nicht bei Single (https://www.delphipraxis.net/100765-canvas-zeichnet-bei-integer-nicht-bei-single.html)

koisa 3. Okt 2007 16:33


Canvas zeichnet bei Integer, nicht bei Single
 
Ich habe folgendes Prolem:
Wenn die definierten Variablen als Integer angeben sind, wird das objekt gezeichnet,
sind diese Variablen jedoch als Single definiert, so wird nicht dargestellt.
Hätte evtl. jemand eine simple Idee??
Danke

DeddyH 3. Okt 2007 16:38

Re: Canvas zeichnet bei Integer, nicht bei Single
 
[ironie] Geht es etwas knapper? [/ironie]

Achja, willkommen in der DP :dp:

inherited 3. Okt 2007 16:43

Re: Canvas zeichnet bei Integer, nicht bei Single
 
Ich nehme Fehlermöglichkeit C, hab ich jetzt was gewonnen? :stupid:


Da canvas IMHO keine Zeichenfunktion kennt die Single als Parameter erwartet oder akzeptiert, gehe ich davon aus dass du den Single irgendwie rundest, aber ohne Quelltext können wir hier nur raten woran es liegt.

malo 3. Okt 2007 16:43

Re: Canvas zeichnet bei Integer, nicht bei Single
 
Du kannst einen Float-Datentyp ganz leicht durch ein Round casten.
Also
Delphi-Quellcode:
var i: integer;
    f: real;

...

i := Round(f);

koisa 3. Okt 2007 16:48

Re: Canvas zeichnet bei Integer, nicht bei Single
 
Delphi-Quellcode:
procedure TFormPalettierung.SpeedButtonZeichnenClick(Sender: TObject);
var Breite, Hoehe :  Integer;
begin

 Lv := StrToFloat (EditLaenge.Text);
 Bv := StrToFloat (EditBreite.Text);


 repaint;
  begin
 if ComboBoxPalettenwahl.ItemIndex = 0 then Breite := 1200;
 if ComboBoxPalettenwahl.ItemIndex = 0 then Hoehe := 800;

 if ComboBoxPalettenwahl.ItemIndex = 1 then Breite := 1200;
 if ComboBoxPalettenwahl.Itemindex = 1 then Hoehe := 1000;


  end;

 begin
 imageDraufsicht.Canvas.rectangle(0,0, Breite div 5 , Hoehe div 5 );
  begin

  imagedraufsicht.canvas.MoveTo(0,Lv div 5 );
  imagedraufsicht.Canvas.LineTo(Lv div 5 ,Bv div 5);
  end;
  end;

end;

Dies funktioniert nicht, fehler wird in der Zeile "imagedraufsicht.canvas.MoveTo(0,Lv div 5 );" und der folgenden angezeigt, "Operator ist auf diesen Operandentyp nicht anwendbar". Die variable Lv und Bv sind vorher als Single definiert.

Wenn ich nur das Rectangle zeichnen lasse funktioniert es mit dem Typ Integer, wenn die variablen Breite bzw Höhe als SIngle def. sind geht dies auch nicht.

Danke

[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]

DeddyH 3. Okt 2007 16:52

Re: Canvas zeichnet bei Integer, nicht bei Single
 
div bezeichnet eine ganzzahlige Division, funktioniert daher auch nur mit ganzen Zahlen. Wie bereits angesprochen, könntest Du die Variablen vorher mit Round() runden.

Neutral General 3. Okt 2007 16:57

Re: Canvas zeichnet bei Integer, nicht bei Single
 
Hi,

1. Bitte Quellcode formatieren
2. Bitte [.delphi][./delphi] tags benutzen (jeweils ohne Punkt.
3. Was sollen die ganzen begin und end;s im Code ? ...

Delphi-Quellcode:
procedure TFormPalettierung.SpeedButtonZeichnenClick(Sender: TObject);
var Breite, Hoehe : Integer;
begin
  Lv := StrToFloat(EditLaenge.Text);
  Bv := StrToFloat(EditBreite.Text);

  repaint; // wofür? lass es weg!

  if ComboBoxPalettenwahl.ItemIndex = 0 then
  begin
    Breite := 1200;
    Hoehe := 800;
  end;

  if ComboBoxPalettenwahl.ItemIndex = 1 then
  begin
    Breite := 1200;
    Hoehe := 1000;
  end;

  imageDraufsicht.Canvas.rectangle(0,0, Breite div 5, Hoehe div 5);
  imagedraufsicht.canvas.MoveTo(0,Round(Lv / 5));
  imagedraufsicht.Canvas.LineTo(Round(Lv / 5),Round(Bv / 5));
end;
Also die Canvas-Methoden wollen immer ein Single haben. div kannst du nur bei Integern benutzen und bei einer div-Operation kommt auch wieder ein Integer raus. Wenn du Singles (allg. Gleitkommazahlen) teilen willst musst du "/" benutzen. Jedoch ist es relativ unsinnig die Werte per StrToFloat aus dem Edit in Single Variablen zu lesen. Benutze Integer Variablen und StrToInt. Singles bringen dir hier gar nix.

Gruß
Neutral General

koisa 3. Okt 2007 17:56

Re: Canvas zeichnet bei Integer, nicht bei Single
 
Ja danke schön nun geht es!

Eine kurze Frage noch: Kann man eine While Funktion in die Zeichenoperation einbinden??

In der Form:

while x<y do

canvas.....(x * p /0)


???

ulhau 3. Okt 2007 18:00

Re: Canvas zeichnet bei Integer, nicht bei Single
 
Hi,

Divsion durch 0 könnte problematisch werden.

Tschüsss!

koisa 3. Okt 2007 18:04

Re: Canvas zeichnet bei Integer, nicht bei Single
 
Das ist durchaus richtig. Gemeint war:

while x<y do

canvas.....(x * p , 0)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:42 Uhr.
Seite 1 von 2  1 2      

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