![]() |
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 |
Re: Procedure-Problem
Präzisier die Frage mal, vielleicht mit einem kleinen Code-Beispiel.
|
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:
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.
// definition einer Prozedur
procedure doFoo(i: Integer); begin ... end; procedure doBar; begin // Aufruf der Prozedur doFoo doFoo(1028); end;
Delphi-Quellcode:
Gruß Der Unwissende
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'); [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 ![]() Sind alles nur Tipps und ist nicht böse gemeint! [/Add] |
Re: Procedure-Problem
Zitat:
Du greifst nicht auf andere Prozeduren zu, sondern du rufst sie höchstens auf. Kannst du deine Frage präzisieren? |
Re: Procedure-Problem
okay also erstmal sorry für die undeutlichkeit meiner frage.
Ich habe folgende funktion (nur ein Teil)
Delphi-Quellcode:
und möchte in einer anderen procedure das AM[i] z.B. darstellen lassen
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; oder auch mit AM[i] weiterrechnen! [edit=SirThornberry]code-Tag durch delphi-Tag ersetzt - Mfg, SirThornberry[/edit] |
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. |
Re: Procedure-Problem
Die Frage ist erstmal: Wo hast du bisher "AM" deklariert?
|
Re: Procedure-Problem
Zitat:
Böse, sehr böse. |
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; |
Re: Procedure-Problem
Zitat:
@Dmo11: Vielleicht solltest du dich "genauer" mit den Grundlagen auseinander setzen. Beispiel: Zitat:
Du machst, so wie es aussieht, einige entscheidende Grundsatzfehler:
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. |
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