Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - eigene Funktion, undefinierter Bezeichner???
daywalker0086 - Sa 29.11.08 19:07
Titel: eigene Funktion, undefinierter Bezeichner???
So ich hab wieder ne FRage die hoffentlich nicht schwer zu beantworten ist.
ich hab folgende Funktion geschrieben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| function temperaturanfordern: string; var sendstr, hexwert :string; begin hexwert:= '52620300FFF902AF'; SendStr := hextostr(hexwert);
SerialPortNG1.SendString(SendStr) ; end; |
da meckert er SerialPortNG1. und SendString(SendStr)
wäre ein undefinierter Bezeichner.
Ich verwende aber genau das gleiche in anderen Proceduren wie zum Bsp:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Button3Click(Sender: TObject); var SendStr,hexwert: String;
begin
hexwert:= '52610300FFF902AE'; SendStr := hextostr(hexwert); SerialPortNG1.SendString(SendStr) ; |
Da geht es ohne Probleme.
Warum meckert er da ?
Wie kann ich dieses Problem beseitigen?
jaenicke - Sa 29.11.08 19:14
Du müsstest es zu einer Funktion deines Formulars machen, dann kennt er auch alles was da drin ist. So wie du es jetzt hast ist es so, als wenn du auf der Straße stehst und den Herd anschalten willst. Du bist aber gar nicht in der Wohnung und weißt also gar nicht welcher Herd gemeint ist.
Dafür musst du oben in der Fomulardeklaration unter private oder public die Funktion deklarieren:
Delphi-Quelltext
1: 2: 3: 4: 5:
| TForm1 = class(TForm) private function temperaturanfordern: string; end; |
Außerdem unten in der Implementierung dann
Delphi-Quelltext
1:
| function TForm1.temperaturanfordern: string; |
Die andere Möglichkeit ist vor jeden Aufruf von etwas im Formular Form1. davorzuschreiben um zu sagen, dass du auf etwas im Forumular zugreifen willst.
Delphi-Quelltext
1:
| Form1.SerialPortNG1.SendString(... |
Delete - Sa 29.11.08 19:16
Oder die beiden als Parameter an die Funktion zu übergeben.
daywalker0086 - Sa 29.11.08 19:32
Danke an euch habs so gemacht wie Jaenicke es gesagt hat.
Funktioniert natürlich :wink:
Ich danke euch wie verrückt.
Achso ich hätt da noch was kleines:
Kann ich irgendwie feststellen ob die Funktion schonmal ausgeführt wurde?
Also nach dem Scheme if temperaturanfordern.execute = true oder sowas?
Der Hintergrund ist der, das es eben nur einmal ausgeführt werden soll aber aus einer
Schleife aufgerufen wird.
Wenn nicht lass ich in der Funktion ne Variable setzen deren Wert ich dann prüfe
Delete - Sa 29.11.08 19:36
| Zitat: |
| Der Hintergrund ist der, das es eben nur einmal ausgeführt werden soll aber aus einer Schleife aufgerufen wird. |
Hä? :gruebel:
jaenicke - Sa 29.11.08 19:36
Dann ruf es doch vor der Schleife auf und speichere das Ergebnis in einer Variablen ;-).
Und nebenbei gehören neue Fragen in ein neues Thema ;-).
daywalker0086 - Sa 29.11.08 19:41
Also die Schleife empfängt laufend Daten von einer seriellen Schnittstelle und wertet diese aus.
Es muss aber einmal mitten zwischen zwei kommandos dieser bestimmte String der in der Funktion steht gesendet werden damit ich an bestimmte Daten komme, danach sendet meine steuerung die daten die ich mit dem String aus der Funktion anfordere automatisch.
Deswegen soll die Funktion nur einmal ausgeführt werden.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!