Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Diese prozedur gängig machen (https://www.delphipraxis.net/34684-diese-prozedur-gaengig-machen.html)

LkZ 26. Nov 2004 14:34


Diese prozedur gängig machen
 
Hi!!

ich hab da ne prozedur, sie funktioniert (syntaktisch), aber nicht sinn gemäß.

Hier mal eine kostprobe:
Quellcode: zusammenfalten | markieren
Delphi-Quellcode:
 procedure TForm1.DrawModel(Canvas:TCanvas;AtomNr,Rad:integer);
var x0,y0,n,k:integer;  
    a,sa:Real;
begin
x0:=Form1.ClientWidth div 2;        {Mitte der Form finden}
y0:=Form1.ClientHeight div 2;
a:=ANr / 2;                               {Formel für bestimmung von Elektronen pro Schale: 2*n^2}
sa:=sqrt(a);                              {Gleichung aufstellen: nach n auflösen; ges.:n=Anzahl SchAle}
n:=round(sa);                              {Atom Nummer=2*n^2   | /2}
                                             {<=> Atom Nummer/2=n^2  | Wurzel}
                                             {<=> Wurzel(Atom Nummer/2) = n}

Canvas.Ellipse(x0-Rad,y0-Rad,x0+Rad,y0+Rad); {Für den (Atom)Kern}
for k:=1 to n do                            {n gefunden}
begin
  Canvas.Ellipse(x0-(Rad*k),y0-(Rad*k),x2+(Rad*k),y0+(Rad*k));{Kreise zeichnen mit gleichem Abstand}
  end;
end;
bitte nicht verwechseln: Rad=Radius des kreises in Pixel
er zeichnet statt n Kreise nur einen..

ich weiss nicht mehr, was daran so rumzufeilen ist, obwohl das echt simpel ist... :wall:
Naja danke im Voraus

MfG LkZ

Nicodius 26. Nov 2004 15:02

Re: Diese prozedur gängig machen
 
was ist denn ANr und x2 ?

Nicodius 26. Nov 2004 15:03

Re: Diese prozedur gängig machen
 
ich denke das der alte kreis immer übermalen wird ... ich kanns aber nicht genau sagen weil ich Anr und x2 nicht weiß

LkZ 26. Nov 2004 15:04

Re: Diese prozedur gängig machen
 
ja..ne sind tippfehler

x2=x0 und ANr=AtomNr (Parameter der prozedur)

sorry

MfG

Nicodius 26. Nov 2004 15:05

Re: Diese prozedur gängig machen
 
"[Fehler] Unit1.pas(31): Inkompatible Typen: 'Integer' und 'Extended'"

mach mal atomnr zu ner real zahl ;)

Delphi-Quellcode:
AtomNr:=5 / 2;               {Formel für bestimmung von Elektronen pro Schale: 2*n^2
AtomNr:=5 / 2; macht aber nicht das nach der formel :gruebel:


ich würde a auch mal initialisieren...

LkZ 26. Nov 2004 15:07

Re: Diese prozedur gängig machen
 
naja, also es macht keinen Unterschied.. :) immernoch das selbe problem

Matze 26. Nov 2004 15:08

Re: Diese prozedur gängig machen
 
Ich sehe nicht, wieso Anr eine real-Zahl sein sollte.

Nachtrag: Ok, zu langsam ;)


Nachtrag: bei mir geht der Code einwandfrei. Zumindest wird ein Kreis gezeichnet, der abhängig von "Rad" und "AtomNr" seinen Radius ändert.


Was genau geht denn nicht?

LkZ 26. Nov 2004 15:13

Re: Diese prozedur gängig machen
 
Hier ist nochmal der "richtige" code (ohne Tippfehler :wink: )

Delphi-Quellcode:
procedure TForm1.DrawModel(Canvas:TCanvas;AtomNr:Real;Rad:integer);
var x0,y0,n,k:integer;
    a,sa:Real;
begin
x0:=Form1.ClientWidth div 2;        {Mitte der Form finden}
y0:=Form1.ClientHeight div 2;
a:=AtomNr / 2;     {Formel für bestimmung von Elektronen pro Schale: 2*n^2}
sa:=sqrt(a);       {Gleichung aufstellen: nach n auflösen; ges.:n=Anzahl SchAle}
n:=round(sa);      {Atom Nummer=2*n^2   | /2}
                    {<=> Atom Nummer/2=n^2  | Wurzel}
                    {<=> Wurzel(Atom Nummer/2) = n}

Canvas.Ellipse(x0-Rad,y0-Rad,x0+Rad,y0+Rad); {Für den (Atom)Kern}
for k:=1 to n do                             {n gefunden}
 begin
  Canvas.Ellipse(x0-(Rad*k),y0-(Rad*k),x0+(Rad*k),y0+(Rad*k));
                                                      {Kreise zeichen mit gleichem Abstand}
  end;
end;
abgesehen von der Formel, weiss ich, wegen den rundungen
bei der for-to-do Schleife müsste eigentl. k:=2 to n, weil die zeile vor der schleife den Atomkern zeichnet. wenn k:=1 und Rad*k = Rad, dann haut das nicht wirklich hin. Toll ....2. Problem

MfG :)

Nicodius 26. Nov 2004 15:14

Re: Diese prozedur gängig machen
 
war nur beiläufig...

aber ich glaube das dzdas besser mit ner function machen solltest - vl geht das gezeichnete verloren ...

LkZ 26. Nov 2004 15:19

Re: Diese prozedur gängig machen
 
Zitat:

Zitat von Nicodius
war nur beiläufig...

aber ich glaube das dzdas besser mit ner function machen solltest - vl geht das gezeichnete verloren ...

Function mit welchem rückgabewert? Der macht doch nix ausser zeichnen, nix berechnen. :)
Oder man macht es im OOP, da hab ich aber meine mängel.

MfG


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:23 Uhr.
Seite 1 von 3  1 23      

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