Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Incompatible types: 'Integer' and 'Extended' (??????) (https://www.delphipraxis.net/34188-incompatible-types-integer-extended.html)

Tobias 18. Nov 2004 21:19


Incompatible types: 'Integer' and 'Extended' (??????)
 
Ich muss für unseren Informatik-Unterricht ein Programm schreiben, und benutze darin eine "SpinEdit"-Komponente...
Für eine Berechnung muss ich den Wert der "spinEdit" durch 2 teilen, krieg das aber irgendwie partout nicht hin... :roll: :roll:

Delphi-Quellcode:
xspin:=spinEdit.Value/2;
Variable ist registriert...
spinEdit heißt wirklich spinEdit und nicht etwa spinEdit1
insofern müsste eigentlich alles klappen...
Aber wegen dem "/2" bringt er folgende Fehlermeldung:
Delphi-Quellcode:
Incompatible types: 'Integer' and 'Extended'
Ich hab jetzt ewig lang rumprobiert, bin aber zu keinem Ergebnis gekommen...

Was ist da falsch?????

sakura 18. Nov 2004 21:20

Re: Bin am verzweifeln....
 
Ändere bitte den Titel, so dass er das Problem anreißt. Danke.

...:cat:...

bigg 18. Nov 2004 21:24

Re: Bin am verzweifeln....
 
Hallo erstmal,

dein problem dabei ist, dass du einen Fließkommawert vermutlich in einen Integer schreiben möchtest.
Entweder teilst du deinen Wert mit "Wert div 2" oder rundest das Ergebnis mit Round(Wert / 2).

Tobias 18. Nov 2004 21:36

Re: Incompatible types: 'Integer' and 'Extended' (??????)
 
klappt leider immernochnicht ganz....

weder mit
Delphi-Quellcode:
xspin:=round(spinEdit.Value/2);
yspin:=round(spinEdit.Value/2);
image1.Canvas.Rectangle(x,y,xspin+x,yspin+y);
noch mit
Delphi-Quellcode:
xspin:=spinEdit.Value div 2;
yspin:=spinEdit.Value div 2;
image1.Canvas.Rectangle(x,y,xspin+x,yspin+y);

erhalte ich ein rechteck der "richtigen" Größe...

folgendes Problem, weshalb ich den spinEdit-Wert durch 2 teilen will:
wenn ich ein rechteck der größe 10 (also 10x10 Pixel) gezeichnet haben will, dann krieg ich mit folgender Funktion ein Rechteck der Größe 20x20... Fragt mich aber nicht wieso... ^^
Delphi-Quellcode:
image1.Canvas.Rectangle(x,y,x+spinEdit.Value,y+spinEdit.Value);

wenn ichs jetzt mit den zwei Funktionen oben ausprobiere, dann ist das rechteck zumindest schonmal kleiner (ca. 14x14), aber nicht 10x10 Pixel groß...

bigg 18. Nov 2004 21:55

Re: Incompatible types: 'Integer' and 'Extended' (??????)
 
Jetzt sollte dir was auffallen.
Code:
Image1.Canvas.Rectangle(3, 3, 13, 13);

Tobias 19. Nov 2004 13:05

Re: Incompatible types: 'Integer' and 'Extended' (??????)
 
@bigg: was soll mir dardan jetzt auffallen? :roll:



hab gestern n och n kumpel gefragt, der konnt mir aber auch net unbedingt weiterhelfen...
hier mal auszugsweise unser gespräch:

Zitat:

[22:57] Marc: des rätsels lösung:
[22:57] Tobi: paint...
[22:57] Marc: xspin: double; anstatt deiem integer
[22:58] Marc: der fehler ist...du teilst eine zahl...z.b. 1 durch 2 als ergebnis kommt 0.5 raus...integer kann aber nur ganz zahlen speichern, daher kommt es an diser stelle zu einem konflikt
[22:58] Marc: kapiert? bzw. funzts?

[22:59] Tobi: ouh shit ^^
stimmt ja ;-)
[22:59] Tobi: There is no overloaded version of 'Rectangle' that can be called with these arguments
[22:59] Tobi: image1.Canvas.Rectangle(x,y,xspin+x,yspin+y);
[23:00] Tobi: hier brauch ichs halt wieder als integer
[23:00] Marc: hmm...runden?
[23:01] Tobi: bzw. mal zum ursprung des problems: warum zeichnets des rechteck überhaupt doppelt so groß?????
[23:03] Tobi: xspin:=spinEdit.Value/2;
yspin:=spinEdit.Value/2;

if BitBtnPunkt.Enabled=false then
begin
if spinEdit.Value=1 then begin
image1.Canvas.Pixels[x,y]:=ColorDialog2.Color;
end else
image1.Canvas.Brush.Color:=ColorDialog2.Color;
image1.Canvas.Rectangle(x,y,round(xspin)+x,round(y spin)+y);
end;
[23:03] Tobi: wenn spinEdit = 1 ist, dann macht er einfach einen ganz normalen 1-pixel großen punkt....
wenn spinEdit = 2 ist, dann soll er ein rechteck zeichnen, 2x2 Pixel...
bei sE=3 3x3 Pixel...
usw....
[23:05] Marc: sprich du willst einfach nen ausgefüllten, punkt in rechteckform machen?
[23:06] Tobi: genau
[23:07] Marc: k...*denkphase*
[23:07] Tobi: k ^^
[23:09] Marc: und dein spinedit soll die breite bzw. höhe angeben?
[23:12] Tobi: genau...
des nur nochmal als anregung... ;-)



mit round() klappt des ganze zwar einigermaßen, allerdings ist der punkt dann immernoch größer als er sein soll... ich weiß ja auch warums so ist (wegen der rundung... z.B. 3 wird eben auf 2 gerunden, und dann entsteht damit natürlich ein anderes rechteck als mit "1,5"), weiß aber keine lösung dafür....

vielleicht kann auch jemand mal beim ursprung des problems nachhelfen:
Zitat:

[23:01] Tobi: bzw. mal zum ursprung des problems: warum zeichnets des rechteck überhaupt doppelt so groß?????

bigg 19. Nov 2004 13:56

Re: Incompatible types: 'Integer' and 'Extended' (??????)
 
Welchen Punkt meinst du denn ?
Es gibt viele Punkte im Rechteck.

Um dein Problem zu lösen, kann man die Verhältnisse ihren Umständen anpassen.
Einen halben punkt kannst du ja nicht zeichnen.

Stell dir vor du musst eine Karte einer Stadt zeichnen.
Ich welchem Maßstab würdest du sie zeichnen ? 1:1 ? 1:2?

Dein eigentliches Problem kenne ich trotzdem noch nicht?

BenniKay 19. Nov 2004 14:05

Re: Incompatible types: 'Integer' and 'Extended' (??????)
 
Hi

Ich habe ein ähnliches Problem. Ich möchte eine Variable vom Typ Integer minus eine Zahl rechnen. Wenn ich den Quelltext eingegeben habe und kompiliere, dann kommt nur noch die Fehlermeldung, dass Integer und Extended inkompatible Typen sind. Kann mir jemand helfen?

bigg 19. Nov 2004 14:53

Re: Incompatible types: 'Integer' and 'Extended' (??????)
 
Liste der Anhänge anzeigen (Anzahl: 1)
@BenniKay:
Das ist normal, da Integer nur ganze Zahlen berechnen kann.
Extended berechnet auch Fließkomma-Werte bis zwanzig Stellen hinter dem Komma.

Schau dir mal das Beispiel an und ließ dir die Kommentare durch.
Hinzugefügt habe ich noch ein Tut über Datentypen im PDF-Format.

Tobias 19. Nov 2004 15:39

Re: Incompatible types: 'Integer' and 'Extended' (??????)
 
@bigg:
ok, dann eben nochmal von ganz von vorne...

wenn spinEdit.Value = 1 ist, dann zeichnet meine funktion einfach einen ganz normalen pixel...
Delphi-Quellcode:
if spinEdit.Value=1 then begin
image1.Canvas.Pixels[x,y]:=ColorDialog2.Color;
wenn spinEdit.Value aber größer als 1 ist, dann soll erin etwas anderes zeichnen, nämlich ein Viereck mit 4 gleich langen seiten mit der seitenlänge "spinEdit.Value"
Delphi-Quellcode:
end else
image1.Canvas.Brush.Color:=ColorDialog2.Color;
image1.Canvas.Rectangle(x1,y1,x2,y2);
end;
x1,y1 sind in diesem fall die koordinaten des mauszeigers, also auch der linken oberen ecke des Vierecks...
wenn meine spinEdit-Komponente jetzt auf 2 steht, will ich, dass es ein Rechteck zeichnet, mit der seitenlänge 2pixel... also ein rechteck der größe 2x2 px....
das problem ist aber dass es das nicht macht, sondern dass es das rechteck immer doppelt so groß zeichnet...
und des problem will ich beheben...
mit den tipps die ich aber bisher bekommen habe, klappt das nicht...


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 Uhr.
Seite 1 von 2  1 2      

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