AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Procedure-Problem

Ein Thema von Dmo11 · begonnen am 29. Nov 2007 · letzter Beitrag vom 2. Dez 2007
Antwort Antwort
Seite 1 von 2  1 2      
Dmo11

Registriert seit: 27. Nov 2007
10 Beiträge
 
#1

Procedure-Problem

  Alt 29. Nov 2007, 08:46
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Procedure-Problem

  Alt 29. Nov 2007, 08:50
Präzisier die Frage mal, vielleicht mit einem kleinen Code-Beispiel.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#3

Re: Procedure-Problem

  Alt 29. Nov 2007, 08:52
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]
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Procedure-Problem

  Alt 29. Nov 2007, 08:53
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?
  Mit Zitat antworten Zitat
Dmo11

Registriert seit: 27. Nov 2007
10 Beiträge
 
#5

Re: Procedure-Problem

  Alt 29. Nov 2007, 09:03
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]
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Procedure-Problem

  Alt 29. Nov 2007, 09:05
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.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: Procedure-Problem

  Alt 29. Nov 2007, 09:06
Die Frage ist erstmal: Wo hast du bisher "AM" deklariert?
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Procedure-Problem

  Alt 29. Nov 2007, 09:07
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.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Dmo11

Registriert seit: 27. Nov 2007
10 Beiträge
 
#9

Re: Procedure-Problem

  Alt 29. Nov 2007, 09:17
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;
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Procedure-Problem

  Alt 29. Nov 2007, 09:23
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 von Dmo11:
Ich habe folgende funktion (nur ein Teil)

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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:44 Uhr.
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