Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Abfrage einer Eigenschaft
Weide - Sa 20.07.02 11:03
Titel: Abfrage einer Eigenschaft
Hallo,
ich benutze eine Komponente, mit der ich Daten über die serielle Schnittstelle senden kann. Leider muß ich mit der Übertragung des nächsten Datensatzes warten, bis das Senden des vorherigen beendet ist. Dies geschieht, indem ich eine Eigenschaft (SendInProgress true/false) abfrage.
Nehme ich dazu irgendwelche Schleifen (while, repeat oder goto), um ständig die Eigenschaft abzufragen, so bleibt das Programm dort hängen. Offensichtlich werden in einer Schleife irgendwelche anderen Komponenten nicht mehr abgefragt. Wie kann ich das umgehen?
vielen Dank im Voraus
Gruß Weide
Marc - Sa 20.07.02 12:38
Hi Weide,
schreib' uns doch mal den Code. Ich denke, dann können Dir unsere User schneller und besser helfen.
Gruß Marc
Tino - Sa 20.07.02 13:46
Weide hat folgendes geschrieben: |
so bleibt das Programm dort hängen |
Wahrscheinlich empfängt das Programm keine Nachrichten mehr. Versuch mal in der While oder Repeat-Schleife die Anweisung
Quelltext
1:
| Application.ProcessMessages; |
einzubauen. Das sollte eventl schon helfen!
Gruß
TINO
Visum - Sa 20.07.02 13:48
Hi,
hab davon eigentlich nicht so die Ahnung.
Spontan würde ich folgendes machen:
Quelltext
1: 2: 3: 4: 5:
| //Datensatz senden repeat sleep(10) until SendInProgress=false; //nächsten Datensatz senden |
Allerdings kann ich das nicht testen, da ich nicht weiß, wie man Datensätze verschickt ;). Ausserdem weiß ich nicht, ob das sleep() das Senden des ersten Datensatzes beeinflusst.
Hoffe trotzdem wenigstens ein bisschen geholfen zu haben
Visum
Weide - Sa 20.07.02 16:40
Hallo,
vielen Dank erstmal für Eure Antworten. Mit "sleep" klappt es leider nicht - hier wird gleichfalls die Datenübertragung gekappt. Mit "application.ProcessMessages" klappt's leider auch nicht, auch nicht mit irgendwelchen Abarten davon (z.B. application.HandleMessage). Immerhin brauch ich mit diesen Methoden das Programm nicht mit der Taskleiste abschiessen - es reagiert immerhin schon auf "ctrl-F2". Leider wird "SendInProgress nach wie vor nicht upgedatet. Vieleicht habt ihr ja noch irgendwelche Ideen.
Ich kann natürlich nach dem Senden einen Moment warten, indem ich einen Timer starte und beim Timer Event den nächsten Datensatz losschicke, aber dazu benötige ich für jeden Datensatz einen Timer - das finde ich sehr unelegant und unübersichtlich. Und wie gesagt - "sleep" funtioniert leider nicht :-(
Gruß Weide
Tino - Sa 20.07.02 22:53
Kannst Du mal den Code der Repeat- oder While-Schleife schicken. Ich kann mir nicht vorstellen das das nicht klappen sollte!
Gruß
TINO
Weide - Sa 20.07.02 23:21
Hallo Tino,
anbei mal der Code:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Senden(Sender:TObject); var Escape: String; begin Escape := #$1b+'[2J'+#$0d; //Display löschen SerialPortNG1.SendString(Escape);
while SerialPortNG1.SendInProgress = true do Application.ProcessMessages;
SendStr := SendStr+#$0d; SerialPortNG1.SendString(SendStr); end; |
Ich sende zunächst eine Escape-Sequenz und anschließend den Datensatz(SendStr). Es müssen allerdings mehrere Escapesequenzen gesendet werden, deshalb suche ich nach einer eleganten/übersichtlichen Variante.
Eine andere Variante funktioniert ebenfalls nicht:
Quelltext
1: 2: 3: 4:
| repeat SendeEnde := SerialPortNG1.SendInProgress; Application.ProcessMessages; until SendeEnde = false; |
Gruß Weide
Bart Simpson - Mi 24.07.02 12:04
Ich weiss nicht, was für ein Gerät Du da ansprechen willst, aber warum ist es denn eigentlich nicht möglich die Befehle direkt hintereinander abzusenden (evtl. mit "Trennnullen")? Checkt das Teil sowas nicht, oder was? Also ich tu grad was ähnliches mit 'nem Messgerät am Com-Port, und ich hab damit keine Probleme.
Bart Simpson
Weide - Mi 24.07.02 12:46
Hallo Bart,
leider geht es so nicht. Ich muß, bevor ich die eigentlichen Nutzdaten schicke, noch ein paar Escapesequenzen senden, um das Gerät (es ist ein Barcode-Funkscanner) zu initialisieren. Leider nimmt er mehrere Escapesequenzen in einem "Durchlauf" nicht an.
Gruß Weide
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 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!