AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Kann SendString von serialng nur bedingt aufrufen
Thema durchsuchen
Ansicht
Themen-Optionen

Kann SendString von serialng nur bedingt aufrufen

Ein Thema von Gummikuh · begonnen am 29. Aug 2011 · letzter Beitrag vom 30. Aug 2011
Antwort Antwort
Gummikuh

Registriert seit: 20. Apr 2011
2 Beiträge
 
Delphi 7 Personal
 
#1

Kann SendString von serialng nur bedingt aufrufen

  Alt 29. Aug 2011, 17:42
Hallo zusammen,

wahrscheinlich sehe ich den Wald vor lauter Bäumen nicht...
Eigentlich funktioniert es mit dem senden recht gut,
aber nur, wenn der Aufruf in der Prozedur "SendBtnClick" erfolgt.

Versuche ich eine neue Prozedur zu schreiben, die ich innerhalb SendBtnClick aufrufe,
beschimpft mich Delphi mit diversen Fehlermeldungen.

Ich wollte etwas in der art wie:

Procedure dummi(Messagetype, Zeilennummer, Text : string);
var SendStr : string;
begin
sendstr := char(01)+Messagetype+char(02)+Zeilennummer+Text+ch ar(03)+char(13);
SerialPortNG1.SendString(SendStr);
end;

Und dann innerhalb von
procedure TForm1.SendBtnClick(Sender: TObject);
var...
begin
diverser code
dummi('V','1','Testtext');
end;

Das allerdings bringt nur folgende Fehlermeldung(en):
[Fehler] batch_tmc.pas(76): Undefinierter Bezeichner: 'SerialPortNG1'
[Fehler] batch_tmc.pas(76): Operator oder Semikolon fehlt
und zwar bereits in der Prozedur dummi.

Wo liegt der Fehler?

Vielen Dank und Gruss aus dem Bergischen Land
Michael

Delphi-Quellcode:
unit batch_tmc;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, ExtCtrls, SerialNG, ToolWin, ComCtrls, Menus, Grids;

type
  TForm1 = class(TForm)
    SendBtn: TButton;
    SerialPortNG1: TSerialPortNG;
    OpenDialog1: TOpenDialog;
    ListBox2: TListBox;
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    MCDateiAuswahl1: TMenuItem;
    DatendateiAuswahl1: TMenuItem;
    Beenden1: TMenuItem;
    Einstellungen1: TMenuItem;
    SeriellerPort1: TMenuItem;
    Timer1: TTimer;
    StatusBar1: TStatusBar;
    Memo1: TMemo;
    Label3: TLabel;
    Label1: TLabel;
    Label4: TLabel;
    verbleibend: TLabel;
    Panel1: TPanel;
    Button1: TButton;
    Label5: TLabel;
    procedure BasicSettingsBtnClick(Sender: TObject);
    procedure SendBtnClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Beenden1Click(Sender: TObject);
    procedure DatendateiAuswahl1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Dummiload(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  test: string;
  globalcount, rest,i,x : integer;
implementation

uses SerialNGBasic;
{$R *.DFM}

procedure TForm1.BasicSettingsBtnClick(Sender: TObject);
begin
  SerialNGBasicDLG.SetDLGData(SerialPortNG1);
  if SerialNGBasicDLG.ShowModal = mrOK then
  SerialNGBasicDLG.GetDLGData(SerialPortNG1);
end;

procedure wait (ms:Cardinal);
Var x: Cardinal;
Begin
x:=GetTickCount;
Repeat
Sleep(1000);
Application.ProcessMessages;
Until GetTickCount >= x+ms;
End;

procedure TForm1.SendBtnClick(Sender: TObject);
var SendStr : String;
i : integer;
begin
  i := globalcount;
  rest := i;
  verbleibend.Caption := inttostr(rest);
  SendStr := '';
  sendstr := char(01) + 'V' + char(02) + '01' + Memo1.Lines[0]+char(03) + char(13);
  SerialPortNG1.SendString(SendStr);
  if x = 5 then
  begin
    listbox2.Items.Delete(0);
    dec(x);
  end;
  listbox2.Items[x] := Memo1.Lines[0];
  Memo1.Lines.Delete(0);
  inc(x);
  dec(i);
  if i = 0 then showmessage('Ende der Liste');
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  SerialPortNG1.Active := False;
end;



procedure TForm1.FormCreate(Sender: TObject);
begin
  SerialPortNG1.Active := True;
  x :=0;
end;


procedure TForm1.Beenden1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.DatendateiAuswahl1Click(Sender: TObject);
var dateiname: string;
begin
opendialog1.Execute;
dateiname := opendialog1.FileName;
if dateiname ='then exit;
memo1.Clear;
Listbox2.Clear;
memo1.Lines.LoadFromFile(Dateiname);
memo1.ReadOnly := true ;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  StatusBar1.Panels[0].Text :='';
  StatusBar1.Panels[1].Text := FormatDateTime('dddd, d mmmm yyyy ',(Now()));
  StatusBar1.Panels[2].Text := FormatDateTime('hh:mm:ss',(Now()));
end;

procedure TForm1.Dummiload(Sender: TObject);
begin
  label5.Caption := inttostr(memo1.Lines.Count);
  globalcount := memo1.Lines.Count;
end;


end
Michael
  Mit Zitat antworten Zitat
schlagzu

Registriert seit: 11. Okt 2010
86 Beiträge
 
Delphi XE Starter
 
#2

AW: Kann SendString von serialng nur bedingt aufrufen

  Alt 29. Aug 2011, 17:45
Zum ersten Fehler:

Versuch mal TForm1.SerialPortNG1.SendString(SendStr);

Bezogen auf
Zitat:
Procedure dummi(Messagetype, Zeilennummer, Text : string);
var SendStr : string;
begin
sendstr := char(01)+Messagetype+char(02)+Zeilennummer+Text+ch ar(03)+char(13);
SerialPortNG1.SendString(SendStr);
end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Kann SendString von serialng nur bedingt aufrufen

  Alt 29. Aug 2011, 17:46
In einer regulären Prozedur sind die Komponenten Deines Formulars unbekannt, in einer Methode des Formulars hingegen nicht.

[edit] @schlagzu: Dazu müsste es aber eine Klassenmethode sein. [/edit]
[edit2] Streiche Klassenmethode, die Komponente müsste eine class property sein. [/edit2]
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

Geändert von DeddyH (29. Aug 2011 um 17:53 Uhr)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Kann SendString von serialng nur bedingt aufrufen

  Alt 29. Aug 2011, 18:27
BTW, das Sleep(1000) in Wait ist Nonsens.
  Mit Zitat antworten Zitat
Gummikuh

Registriert seit: 20. Apr 2011
2 Beiträge
 
Delphi 7 Personal
 
#5

AW: Kann SendString von serialng nur bedingt aufrufen

  Alt 29. Aug 2011, 19:15
Hallo,
erstmal vielen Dank für die Antworten.
Nun geht es mir wie Faust; Da steh ich nun, ich armer Tor,und bin so klug als wie zuvor.
Als ich Turbo Pascal 5 gelernt habe, und man im Duisburger Zoo noch Dinosaurier(wie mich) bewundern konnte,da waren wir vielleicht in der Abendschule eine proppere Klasse, aber "class property", nee, soh'n Schweinkram gab's damals noch nicht
'tschuldigung, das wollte einfach raus...

Also, wie oben geschrieben, bin ich relativ unerfahren/unbedarft was Objektsprachen angeht.
Ich habe mein Prog. aufgebaut auf SerialNGBasisdemo, welches ich entsprechend abgespeckt/umgebaut habe. Wie mit scheint, ist es mir aus irgendeinem Grund unmöglich, "SerialPortNG1.SendString"
ausserhalb der Prozedur "TForm1.SendBtnClick" aufzurufen.

@Schlagzu
leider bringt "TForm1.SerialPortNG1.SendString(SendStr);" auch diverse Fehlermeldungen.
TForm1.SerialPortNG1[1].SendString[2](SendStr);
[1] Methodenbezeichner erwartet
[2] Operator oder Semikolon fehlt

@DeddyH
leider kann ich mit Deiner Info nichts anfangen.
Was habe ich falsch gemacht/was muss ich ändern?
Ich vermute, ich muss in dem Prog. SerialNG etwas aendern?

@Bjoerk
Mag sein, aber als ich merkte das es den guten, alten Delay aus TP5-Zeiten nicht mehr gab,
habe ich die kleine Prozedur Wait in den unendlichen Weiten des WWW gefunden; Jemand hatte es als Ressourcen-schonend beschrieben, falls dem nicht so ist, auch egal, da auf dem Rechner später nur mein Prog. laeuft.

Gruss
Michael
Michael
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Kann SendString von serialng nur bedingt aufrufen

  Alt 29. Aug 2011, 21:45
Delphi-Quellcode:
type
  TForm1 = class(TForm)
   ..
  private
    Procedure dummi(Messagetype, Zeilennummer, Text : string);
  end;

var
  Form1: TForm1;
  test: string;
  globalCount, rest, I, X: integer;

implementation

uses
  SerialNGBasic;


{$R *.DFM}


Procedure TForm1.dummi(Messagetype, Zeilennummer, Text : string);
begin
  ..
end;
Edit: Das Sleep einfach rauslöschen

http://www.delphi-forum.de/topic_Dat...31b10594c1c2db

Geändert von Bjoerk (29. Aug 2011 um 21:49 Uhr) Grund: Edit
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Kann SendString von serialng nur bedingt aufrufen

  Alt 30. Aug 2011, 07:11
Um es noch detaillierter darzustellen:
Delphi-Quellcode:
type
  TDings = class
  private
    FFeld: integer; //privates Feld von TDings
    procedure TuWas; //eine Methode von TDings
  end;

procedure TDings.TuWas;
begin
  (* Da es sich hier um eine Methode des Objektes handelt, kann dieses auf seine eigenen Felder
     wie z.B. FFeld zugreifen, sie gehören ihm ja. *)

end;

procedure TuWasAnderes; //eine reguläre Prozedur
begin
  (* Hier ist nur das bekannt, was innerhalb der Unit öffentlich ist oder als Parameter
     übergeben wurde. *)

end;

procedure GanzWasAnderes(Dings: TDings);
begin
  (* Hier kann man nun auf die Felder und Methoden des übergebenen TDings-Objektes zugreifen. *)
end;
Und zu dem wait: such einmal hier in der DP nach Delay, davon sind einige Varianten zu finden.
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
Antwort Antwort


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 19:10 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