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/)
-   -   Procedure-Problem (https://www.delphipraxis.net/104203-procedure-problem.html)

Dmo11 29. Nov 2007 08:46


Procedure-Problem
 
Hallo Leute,

mal eine kurze Frage:
Wie kann ich auf andere Proceduren zurückgreifen?
(da ich die Werte bräuchte und nicht alles doppelt im Quelltext stehen soll)


mfg dmo11

DeddyH 29. Nov 2007 08:50

Re: Procedure-Problem
 
Präzisier die Frage mal, vielleicht mit einem kleinen Code-Beispiel.

Der_Unwissende 29. Nov 2007 08:52

Re: Procedure-Problem
 
Hi,
an sich musst Du nur den Namen der Proezedur hinschreiben. Bekommt die dann auch noch Werte übergeben, folgt diesem Namen eine Klammer in der Du Komma-separiert die Belegungen für die Parameter übergibst.

Delphi-Quellcode:
// definition einer Prozedur
procedure doFoo(i: Integer);
begin
...
end;

procedure doBar;
begin
  // Aufruf der Prozedur doFoo
  doFoo(1028);
end;
Liegt die Prozedur in einer anderen Unit, so musst Du die Unit in die uses Klausel aufnehmen (es können nur Prozeduren/Funktionen aufgerufen werden, wenn diese im Interface Teil einer fremden Unit deklariert wurden oder eben in der gleichen Unit liegen). Beim Methoden (Prozeduren/Funktionen einer Klasse) musst Du diese für ein bestimmtes Objekt aufrufen. Ein Objekt ist das, was in einer Variable gespeichert wird (korrekterweise muss man sagen es wird nur ein Verweis auf's Objekt gespeichert), wenn Du mit .Create eine neue Instanz einer Klasse erzeugst.

Delphi-Quellcode:
var s: TStringList;
begin
  s := TStringList.Create;
  // so sieht der Aufruf der Methode add(s: String) für ein Objekt
  // vom Typ TStringList aus
  s.add('Ein String');
Gruß Der Unwissende

[Add]
Und für's nächste mal ein paar Bitten/Hinweise:
Je mehr Informationen Du gibst, desto leichter (und bereitwilliger) wird Dir geholfen. Also immer sagen woran genau Du scheiterst und was Du schon versucht hast (was passiert dabei, was erwartest Du, ...)
Dann sind solche Fragen ja auch nicht neu, also immer erstmal die Suche benutzen (und wenn Du gesucht und nichts gefunden hast das auch sagen).
Desweiteren solltest Du bei so elementaren Fragen dann auch ruhig mal ein Tutorial durchgehen, auch da gibt es genug links, z.B. auf DSDT

Sind alles nur Tipps und ist nicht böse gemeint!
[/Add]

Jelly 29. Nov 2007 08:53

Re: Procedure-Problem
 
Zitat:

Zitat von Dmo11
Wie kann ich auf andere Proceduren zurückgreifen?

Die Frage ist falsch gestellt...

Du greifst nicht auf andere Prozeduren zu, sondern du rufst sie höchstens auf.

Kannst du deine Frage präzisieren?

Dmo11 29. Nov 2007 09:03

Re: Procedure-Problem
 
okay also erstmal sorry für die undeutlichkeit meiner frage.
Ich habe folgende funktion (nur ein Teil)

Delphi-Quellcode:
procedure TForm1.RadioButton1Click(Sender: TObject);
begin
   .
   .
   .
   for i:=0 to m-1 do
    begin
      s:=0;
      s:=u1*sin(2*pi/m*s1*i+sigma1)+u2*sin(2*pi/m*s2*i+sigma2)+signal;
     
      Zeitsignal[i]:=s;

      AM[i]:=u_AMT*sin(2*pi/m*s_AMT*i+sigma_AMT)*Zeitsignal[i];
    end;
und möchte in einer anderen procedure das AM[i] z.B. darstellen lassen
oder auch mit AM[i] weiterrechnen!

[edit=SirThornberry]code-Tag durch delphi-Tag ersetzt - Mfg, SirThornberry[/edit]

RavenIV 29. Nov 2007 09:05

Re: Procedure-Problem
 
Wenn Du Werte aus einer Procedure brauchst, kannst Du aus der Procedure eine Function machen, die kann dann auch Werte zurückgeben.
Oder Du benutzt Member-Variablen. Diese werden im private-Teil des Formulars / Klasse eingetragen. Meistens mit einem "f" vornedran (z.B. fBenutzerErkannt oder fBerechneterWert). Auf diese Variablen kannst Du aus jeder Procedure / Function zugreifen.

Weiterhin solltest Du Code, den Du in mehreren Funktionen benötigst in eine eigene Funktion ausgliedern.

Muetze1 29. Nov 2007 09:06

Re: Procedure-Problem
 
Die Frage ist erstmal: Wo hast du bisher "AM" deklariert?

RavenIV 29. Nov 2007 09:07

Re: Procedure-Problem
 
Zitat:

Zitat von Muetze1
Die Frage ist erstmal: Wo hast du bisher "AM" deklariert?

Sieht für mich aus wie eine globale Variable.
Böse, sehr böse.

Dmo11 29. Nov 2007 09:17

Re: Procedure-Problem
 
ich hab mir dieses in der anzeige erspart, der vollständigkeit halber:

Delphi-Quellcode:
procedure TForm1.RadioButton1Click(Sender: TObject);
var
  signal,
  u1,u2,u3,
  s1,s2,s3,
  sigma1,sigma2,sigma3,
  u_AMT,s_AMT,sigma_AMT : real;
  m:                     integer;             //Anzahl der Abtastwerte
  i:  integer;                                //Laufvariable
  Zeitsignal,AM: :  array of single;        
 
begin
 
  //Vereinbarungen
  m:=1000;
  setlength(Zeitsignal,m);
  setlength(AM,m);
 
  u1:=StrToFloatDef(Edit4.Text,0);
  u2:=StrToFloatDef(Edit7.Text,0);
  u3:=StrToFloatDef(Edit10.Text,0);
  s1:=StrToFloatDef(Edit5.Text,0);
  s2:=StrToFloatDef(Edit8.Text,0);
  s3:=StrToFloatDef(Edit11.Text,0);
  sigma1:=StrToFloatDef(Edit6.Text,0);
  sigma2:=StrToFloatDef(Edit9.Text,0);
  sigma3:=StrToFloatDef(Edit12.Text,0);
  u_AMT:=StrToFloatDef(Edit1.Text,0);
  s_AMT:=StrToFloatDef(Edit2.Text,0);
  sigma_AMT:=StrToFloatDef(Edit3.Text,0);

  for i:=0 to m-1 do
    begin
      signal:=0;
      signal:=u1*sin(2*pi/m*s1*i+sigma1)+u2*sin(2*pi/m*s2*i+sigma2)+signal;
      signal:=u3*sin(2*pi/m*s3*i+sigma3)+u4*sin(2*pi/m*s4*i+sigma4)+signal;

      Zeitsignal[i]:=signal;

      AM[i]:=u_AMT*sin(2*pi/m*s_AMT*i+sigma_AMT)*signal;
    end;
 
  chart1.Series[0].clear;
  chart2.Series[0].clear;
 
  for i:=0 to round(m-1) do
    begin
      chart1.Series[0].AddXY(i,Zeitsignal[i]);
      chart2.Series[0].AddXY(i,AM[i]);
    end;

end;

Jelly 29. Nov 2007 09:23

Re: Procedure-Problem
 
Zitat:

Zitat von Muetze1
Die Frage ist erstmal: Wo hast du bisher "AM" deklariert?

Und:
  • u_AMT
  • m
  • s_AMT
  • sigma_AMT
  • Zeitsignal

@Dmo11: Vielleicht solltest du dich "genauer" mit den Grundlagen auseinander setzen. Beispiel:

Zitat:

Zitat von Dmo11
Ich habe folgende funktion (nur ein Teil)

Delphi-Quellcode:
procedure TForm1.RadioButton1Click(Sender: TObject);

Das ist keine Funktion sondern eine Prozedur.

Du machst, so wie es aussieht, einige entscheidende Grundsatzfehler:
  • Du errechnest aus der Gui heraus irgendwas. Sowas lagert man normalerweise in getrennte Klassen aus. Die Klasse rechnet, und die Gui stellt das Ergebnis dar.
  • Du verwendest entweder die oben aufgelistetet globalen Variablen, oder aber du hast sie bestenfalls als Felder oder Eigenschaften in deiner Form-Klasse angelegt. Beides ist schlecht. Ich würde sie auslagern in eine getrennte Klasse oder Collection
  • Dein Form heisst wohl Form1... Gib dem Kind einen Namen. Wenn du mal 38 Formulare in deiner anwendung hast, bist du hoffnungslos verloren. Und die Komponenten dürfen auch ruhig getauft werden, sonst findest du dich nie mehr zurecht. RadioButton1 ist kein vernünftiger Name

Die Kunst des Programmierens ist es, den Code sauber und strukturiert zu halten. Jede Funktionalität die du einbaust, sollte möglichst entkoppelt sein von der Anwendung selbst. Genau dafür sind Klassen gedacht, die für sich alleine betrachtet, existieren können, ohne zu wissen, von wem sie genutzt werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:34 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