![]() |
Delphi-Version: 5
In Image einer anderen Unit zeichnen
Hallo,
ich habe aktuell zwei Probleme. 1. Ich bin gerade dabei, per Button-procedure einen Graphen in das Image einer anderen Unit zu zeichnen.
Delphi-Quellcode:
Das ist die "zeichnende Befehlszeile". Könnt ihr mir sagen, woran es liegt?
Form1.Image1.Canvas.Pixels[round((x*prop)+8), round(Image1.Height-9-(y*prop))]:=clblack;
Die Unit ist auch eingebunden (und die Form heißt auch Form1):
Delphi-Quellcode:
2. Ich mache hier einen Timer, um zu überprüfen, ob eine Zahl zwischen 1 und 90 eingegeben wird. Jedoch erscheint "incompatible types" und
implementation
uses Unit1; das then wird rot hinterlegt. Kann mir auch da jmd. helfen? Danke, wär supernett.
Delphi-Quellcode:
Schon mal großes Danke im Voraus!
procedure TForm2.PruefTimer(Sender: TObject);
begin if 0<StrToFloat(Winkel.text)<90 then begin Aussage.Color:=clRed; Aussage.Caption:='Alle Eingaben sind korrekt'; end; |
AW: In Image einer anderen Unit zeichnen
Zitat:
Also was passiert denn nun? (oder nicht) Und eine Frage pro Thread. Aber klammer das mal und dann kommst du selber drauf, warum das so nicht gehen kann.
Delphi-Quellcode:
if (0 < DeinFloat) < 90 then
if EinBoolean < 90 then |
AW: In Image einer anderen Unit zeichnen
Bei dem ersten "Problem" weiß ich eigentlich auch nicht was den Problem ist. Aber mal kurz zu der Zeile:
Delphi-Quellcode:
Image hat eigentlich kein eigenes Canvas, es greift auf das Canvas der Bitmap zu, bzw. konkret auf die Canvas von Image.Picture.Bitmap.Canvas. Die und die Canvas von Image.Canvas sind gleich. Gibt es diese Canvas nicht, gibt es Probleme. Wann gibt es die Canvas nicht? Wenn in der Image z. B. ein Jpeg, Gif, Png, Ico o. ä. geladen sind. Auch ist die Canvas eigentlich immer so groß wie die Bitmap, sie richtet sich nicht nach der Image.
Form1.Image1.Canvas.Pixels[1, 1] := clBlack;
Was den Winkel angeht, dafür brauchst du keinen Timer. Im Grunde wird das im Ereignis OnExit der Edit kontrolliert. Willst du das stets aktuell haben, kannst du es in OnChange machen. |
AW: In Image einer anderen Unit zeichnen
Die Sache mit dem Timer hat dann irgendwie geklappt, als ich es als zwei Bedingungen formuliert habe und die 0 bei dem Vergleich "vorne" geschrieben habe. ^^ Wie funktioniert das OnChange? (Sry, ich bin erst in der zehntenKlasse, das hatte ich noch nicht)
Bei dem "Pixelzeichnen" habt ihr natürlich recht, ich hab vergessen, das Problem zu sagen :oops: Es ist so, dass er ausgibt, dass er Image1 nicht finden kann/es nicht existiert. Deshalb hatte ich das Einbinden der Unit dazugeschrieben, um zu zeigen, dass ich das nicht vergessen hab. Unsere Lehrer haben uns bei Delphigrafik gesagt, dass wir in Images zeichnen sollen.. Ist es schlimm, dass das Image nicht so direkt ein eigenes Canvas hat oder ist das nur Formsache? Da der Text etwas unstrukturiert ist, hab ich mal die Teile unterstrichen, bei denen ich für eure Hilfe sehr dankbar wäre. |
AW: In Image einer anderen Unit zeichnen
Was du gemacht hast ist eigentlich schon richtig. Mit
Delphi-Quellcode:
sagst du, dass sich die Image1 auf Form1 befindet.
Form1.Image1.Canvas.Pixels...
Der Fehler liegt somit vermutlich in der Sichtbarkeit, und die ist u. a. davon abhängig wo die Image1 deklariert- und wo die Unit1 eingebunden wurde. Ich gehe mal davon aus, dass die Image1 auf der Form1 einfach abgelegt wurde. Die Einbindung der Unit scheint auch richtig zu sein. Was bisher gepostet wurde ist nicht falsch. Ich denke mir du mußt mehr veröffentlichen. Was die OnChange angeht, das Edit-Feld auswählen, im Objekt-Inspektor auf Ereignisse gehen und dort doppelt in OnChange klicken. //EDIT: Das mit TImage und Canvas ist eigentlich keine Formsache. Wie schon gesagt kann TImage verschiedene Bild-Typen darstellen, darunter TBitmap. Eigentlich hat TImage keine eigene Canvas, bedient sich aber der Canvas von TBitmap, der der Grafik-Typ TBitmap ist. Es mag also so sein, dass bei einer leeren TImage beim ersten Zugriff auf Canvas eine Bitmap erstellt wird, so dass man drauf zeichnen kann. Ich persönlich halte das für eine wackele Angelegenheit. Ändern sich die Einstellungen schon gibt es Probleme. |
AW: In Image einer anderen Unit zeichnen
Zitat:
![]() Zitat:
Zitat:
Zitat:
|
AW: In Image einer anderen Unit zeichnen
Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
die zweite Form auf. Das klappt auch. Wie oben schon gezeigt, ist Unit1 auch in PEG eingebunden. (Muss man nur alle Units in die Main Unit einbinden oder auch die Main Unit in allen anderen nochmal?)
Form1.Show;
Die Zeile
Delphi-Quellcode:
(das steht in PEG und bezieht sich auf Unit1/Form1) ist in eine "repeat until"-Schleife eingebunden.
Form1.Image1.Canvas.Pixels[1, 1] := clBlack;
In einer procedure, die in der Implementation von PEG definiert wurde, klappt das aber, dort findet er das Canvas:
Delphi-Quellcode:
with Form1.Image1.Canvas do
begin //Achsen zeichnen Pen.Color:=clBlack; MoveTo(8,Form1.Image1.Height-9); LineTo(Form1.Image1.Width-9,Form1.Image1.Height-9); MoveTo(8,Form1.Image1.Height-9); LineTo(8,8); //Pfeilenden einzeichnen Pixels[7,9]:=clBlack; //y-Achse Pixels[6,10]:=clBlack; Pixels[5,11]:=clBlack; Pixels[4,12]:=clBlack; |
Hat sich geklärt..
Es war ein Fehler der Art :wall:
Delphi-Quellcode:
Bei Angabe der y-Koordinate fehlte das "Form1." und ich habe nur vorn gesucht -.-
Form1.Image1.Canvas.Pixels[round((x*prop)+8), round(Image1.Height-9-(y*prop))]:=clblack;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 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 by Thomas Breitkreuz