Autor Beitrag
daywalker0086
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: Sa 29.11.08 19:07 
So ich hab wieder ne FRage die hoffentlich nicht schwer zu beantworten ist.
ich hab folgende Funktion geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function temperaturanfordern: string;
var
sendstr, hexwert :string;
begin
      hexwert:= '52620300FFF902AF';   // 52 62 03 00 ff f9 02 AF        für die Tempi
      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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button3Click(Sender: TObject);  //Hier wird das Initialisierungskommando Ra -7 gesendet
var SendStr,hexwert: String;

begin


       hexwert:= '52610300FFF902AE';    //52610300FFF902AE
      SendStr := hextostr(hexwert);      
      SerialPortNG1.SendString(SendStr) ;


Da geht es ohne Probleme.
Warum meckert er da ?
Wie kann ich dieses Problem beseitigen?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
TForm1 = class(TForm)
  // ...
private  
  function temperaturanfordern: string;
end;

Außerdem unten in der Implementierung dann
ausblenden 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.
ausblenden Delphi-Quelltext
1:
Form1.SerialPortNG1.SendString(...					
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 29.11.08 19:16 
Oder die beiden als Parameter an die Funktion zu übergeben.
daywalker0086 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: 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
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243


Delphi 2005 Architect
BeitragVerfasst: 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.