Entwickler-Ecke

Multimedia / Grafik - Rechteck wird nach Angabe von zwei Werten nicht angezeigt


oneP - Mo 04.05.09 21:04
Titel: Rechteck wird nach Angabe von zwei Werten nicht angezeigt
Hallo zusammen,

ich bin erst ein Anfänger in Delphi-Programmierung und hab mir ein Heft von KnowWare zum lernen gekauft. Da drin wird unter anderem ein kleines Programm beschrieben, mit dem man durch die Angabe von zwei Längen ein Rechteck erscheinen lassen kann. Das Programm hab ich eingetippt, so wie es im Buch war, und es wurden auch keine Fehler angezeigt.

Wenn ich es dann starte und zwei Werte eintippe, erscheint aber kein Rechteck :(

dieser Code soll im Programm das Rechteck aufrufen:


Delphi-Quelltext
1:
2:
3:
4:
procedure TRechteck.Zeichnen;
   begin
     Form5.Canvas.Rectangle(1010, Round(Breite), Round(Hoehe));
   end;



bei mir werden auch zB Linien nicht angezeigt (mit dem Moveto; Lineto -Befehl)

ach ja, und ich benutze das Programm Turbo Delphi 2006

würd gern wissen ob das am Computer, DelphiProgramm oder am Programmcode liegt. hoffentlich habt ihr ne Lösung für das Problem.

thx im vorraus

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.


Delete - Mo 04.05.09 21:12

Welche Werte haben denn Breite und Höhe?


oneP - Mo 04.05.09 21:17

diese Werte werden dann ins fertige programm eingegeben

die sind doch im prinzip egal (oder?)

ich habe zb breite 300 und höhe 250 eingetippt


Delete - Mo 04.05.09 21:29

Nee, egal sind die nicht, wenn eins von beiden 0 ist, wird auch nichts gezeichnet. Hast Du denn auch die richtige Zeichenfläche am Wickel(Form5.Canvas)?


oneP - Mo 04.05.09 21:31

Ja das Formular heißt Form5
(wurd automatisch so benannt)


mkinzler - Mo 04.05.09 21:35

user profile icononeP hat folgendes geschrieben Zum zitierten Posting springen:
Ja das Formular heißt Form5
(wurd automatisch so benannt)

Kann/sollte man aber auf etwas Sinnvolles abändern


oneP - Mo 04.05.09 22:01

jaa..
is auch nur so ein übungs/probe Programm

was ich noch sagen wollt ist, dass wenn ich einfach ein formular mit einem Button mach und dann ein rechteck programmiere dann wird es angezeigt.

Aber bei dem Programm wo man 2 werte selbst eingeben muss erscheint das rechteck nicht


jakobwenzel - Mo 04.05.09 22:03

Dann wäre es vielleicht mal an der Zeit mehr Code zu zeigen, denn in dem bisherigen Teil scheint der Fehler ja nicht zu liegen. :wink:


oneP - Mo 04.05.09 22:13

user profile iconjakobwenzel hat folgendes geschrieben Zum zitierten Posting springen:
Dann wäre es vielleicht mal an der Zeit mehr Code zu zeigen, denn in dem bisherigen Teil scheint der Fehler ja nicht zu liegen. :wink:


ok das ist das Programm:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
unit Unit5;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type

  Trechteck = class
    Breite: single;
    Hoehe: Single;
    function Flaeche: Single;
    function Umfang: Single;
    procedure Zeichnen;
  end;

  TForm5 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Panel1: TPanel;
    Panel2: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form5: TForm5;
  Rechteck: TRechteck;

implementation

{$R *.dfm}

   function TRechteck.Flaeche: Single;
   begin
     result := Breite* Hoehe;
   end;

   function TRechteck.Umfang: Single;
   begin
     Result := 2 * (Breite + Hoehe);
   end;

   procedure TRechteck.Zeichnen;
   begin
     Form5.Canvas.Rectangle(1010, Round(Breite), Round(Hoehe));
   end;

procedure TForm5.Button1Click(Sender: TObject);
begin
  Repaint;
  Rechteck.Breite := StrToFloat (Edit1.Text);
  Rechteck.Hoehe:= StrToFloat (Edit2.Text);
  Panel1.caption:= FloatToStr(Rechteck.Flaeche);
  Panel2.Caption:= FloatToStr(rechteck.Umfang);
  Rechteck.Zeichnen;
end;

procedure TForm5.FormCreate(Sender: TObject);
begin
  Rechteck := TRechteck.Create;
end;

end.


Xentar - Mo 04.05.09 22:51

Mal ne "blöde" Frage..
an welcher Position liegen deine Edit Felder, Label, und vor allem die Panel?
Außerdem wäre für sowas eine Paintbox besser geeignet.

Ganz nebenbei gibst du das Rechteck auch nicht frei, und es wäre "schöner", wenn du der Instanz ein Canvas übergibst (z.B. im Constructor), wo es drauf malen soll.


oneP - Di 05.05.09 15:46

Formular: Höhe 335 Breite 432
die 2 Edit Felder liegen auf der rechten Seite untereinander (bei der Breite von 312). Hier sind auch zwei kleine Panels die die Fläche und Umfang anzeigen sollen. Der Button liegt unten bei einer Höhe von 240.
(kann man vielleicht irgendwie Bilder Posten??)

Also liegt es an der Positionierung?


oneP - Mo 11.05.09 15:12

hat vielleicht noch jemand das selbe Problem?


jaenicke - Mo 11.05.09 15:33

user profile icononeP hat folgendes geschrieben Zum zitierten Posting springen:
(kann man vielleicht irgendwie Bilder Posten??)
Du kannst ein Bild in den Anhang legen, genauso aber auch einfach dein Projekt (.dpr, .pas und .dfm Dateien als Zip).


oneP - Mo 11.05.09 15:40

hier das Bild:

Moderiert von user profile iconNarses: BMP->PNG


ffgorcky - Mo 11.05.09 15:41

Also ich sehe leider nirgendwo eine Angabe, wo die Linien-Dicke festgelegt wird.
Wenn Die Linie also nur eine Breite von 0,001 mm hat, dann wäre sie ja auch sehr schlecht zu sehen - oder?


GTA-Place - Mo 11.05.09 15:44

Linien haben aber grundsätzlich eine Dicke von 1 Pixel, wenn man es nicht einstellt ;)


oneP - Mo 11.05.09 15:45

hää?
wie wird die liniendicke festgelegt??
hab gedacht des rechtck wird dann ganz normal angezeigt wenn man die längen angibt.


jaenicke - Mo 11.05.09 15:49

Also dein Quelltext ist zwar nicht richtig wie schon gesagt wurde (Freigabe und so), aber funktionieren tut es...
Siehe Anhang.

// EDIT:
Mal nen sauberes Beispiel, siehe zweiten Anhang.


oneP - Mo 11.05.09 16:39

was ist an meinem Quelltext falsch?
schließlich hab ich es ja aus nem Übungsbuch genauso übertragen (da ist kein einziger schreibfehler drin). Der Beschreibung im Buch nach müsste es funktionieren


jaenicke - Mo 11.05.09 17:13

Dein Quelltext funktioniert ja auch, siehe Screenshot, da habe ich 1:1 deinen Quelltext verwendet. Nur Zahlen unter 10 werden nicht klappen, da das Quadrat dann seinen rechten unteren Punkt links von oder oberhalb des ersten Punktes hat.

Ich sagte ja schon, häng dein Projekt doch einmal an, vielleicht hast du vergessen das Ereignis OnClick mit dem Button zu verbinden, so dass das gar nicht ausgeführt wird oder so...


oneP - Mo 11.05.09 17:30

Also ein OnKlick ereignis hab ich.
Außerdem hast du nicht ganau den gleichen Quelltext genommen weil ich nichts mit der Paintbox gemacht hab.
Und eine frage noch: wie hast du das gemacht, dass gleich nach der eingabe das rechteck verändert wird (also ohne ButtonKlick) ?


jaenicke - Mo 11.05.09 17:38

user profile icononeP hat folgendes geschrieben Zum zitierten Posting springen:
Also ein OnKlick ereignis hab ich.
Ja, nur im Quelltext oder auch mit dem Button verknüpft? Häng doch dein Projekt einfach an, dann wäre das viel einfach... (.dpr, .pas und .dfm reichen wie gesagt in einem Zip)

user profile icononeP hat folgendes geschrieben Zum zitierten Posting springen:
Außerdem hast du nicht ganau den gleichen Quelltext genommen weil ich nichts mit der Paintbox gemacht hab.
Stimmt nicht, der Screenshot stammte von deinem Quelltext, ich habe danach dann das sauber programmiert und das Projekt in dem Edit gepostet.

user profile icononeP hat folgendes geschrieben Zum zitierten Posting springen:
Und eine frage noch: wie hast du das gemacht, dass gleich nach der eingabe das rechteck verändert wird (also ohne ButtonKlick) ?
OnChange beim Edit? ;-)


oneP - Mo 11.05.09 17:56

hier die .dpr, .pas und .dfm


Xentar - Mo 11.05.09 18:10

Wie schon die ganze Zeit gepredigt wird: Das Ereignis Button1.OnClick ist nicht im Objektinspektor zugewiesen.


GTA-Place - Mo 11.05.09 18:11

Dein Button ist nicht mit dem OnClick-Ereignis verknüpft. Wähle im Objektinspektor den Reiter "Ereignisse" aus, nachdem du den Button angeklickt hast und wähle im DropDown dann das Ereignis aus.

Dein OnCreate übrigens auch nicht. Dafür gilt die selbe Prozedur mit der Form.


ORANGE - aber ich schreib fertig -_-


oneP - Mo 11.05.09 18:22

huh... :zustimm:
endlich hab ichs kapiert. Aber wieso die Ereignisse nicht verknüpft waren, ist mir ein Rätsel.

Danke nochmals!