Schleifen in Lazarus (ähnlich FPC)

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Latze
Beiträge: 60
Registriert: Sa 4. Jul 2009, 09:11
OS, Lazarus, FPC: Win7 / Linux (Lazarus 1.4.0)
CPU-Target: 32Bit/64Bit

Schleifen in Lazarus (ähnlich FPC)

Beitrag von Latze »

Hallo,

ich bringe evtl. ein paar 'Unsitten' aus einem/meinem vielleicht unsauberen Stil von FPC mit. Es geht um einen GPS-Logger, der einfach die NMEA-Datensätze auswertet und diese als GPX-Datei speichert. Das ganze sieht ungefähr so aus:

Code: Alles auswählen

repeat
  repeat
 
    { Einlesen und auswerten der Datensätze. }
 
  until keypressed;
 
  { Tastatureingabe wird als byte in buf gespeichert }
  { Auswertung der Tastatureingabe (z.B. t für Trackmark) }
 
until buf=27; { Also Aufzeichnung mit [ESC] beenden. }


Ich möchte nun eine GUI Anwendung schrieben, die mir die aktuellen Daten anzeigt und bei Bedarf einen Track aufzeichnet. Das ganze sollte über Buttons gestartet bzw. gestoppt werden nur weiß ich nicht, wie ich diese Routine wo hinpacken muss, damit ich sie dann auch irgenwie starten und stoppen kann. Zur Zeit habe ich nur einen Button, mit dem ich einen Datensatz einlesen und auswerten kann, was allerdings nicht so das ideale ist.

Vielleicht kann mir ja jemand helfen.


Gruß
Latze
Wer glaubt, etwas zu sein, hat aufgehört, etwas zu werden.

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Schleifen in Lazarus (ähnlich FPC)

Beitrag von monta »

Herzlich willkommen im Forum.

Mit zwei Buttons geht es wohl am einfachsten über einen Boolean, denn du mit dem Stop-Button setzt und dann wird abgebrochen, ungefähr so:

Code: Alles auswählen

var
  Form1: TForm1;
  Stop: boolean; //Zum Stoppen der Schleife
 
implementation
 
{ TForm1 }
 
//Start-Knopf:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Stop:= false;
  repeat
    //was auch immer in die Schleife soll
    Application.ProcessMessages;
  until Stop; //läuft solange, bis Stop gedrückt wird
end;
 
//Knopf zum Beenden
procedure TForm1.Button2Click(Sender: TObject);
begin
  Stop := true;
end;
Johannes

Latze
Beiträge: 60
Registriert: Sa 4. Jul 2009, 09:11
OS, Lazarus, FPC: Win7 / Linux (Lazarus 1.4.0)
CPU-Target: 32Bit/64Bit

Re: Schleifen in Lazarus (ähnlich FPC)

Beitrag von Latze »

monta hat geschrieben:Herzlich willkommen im Forum.

Mit zwei Buttons geht es wohl am einfachsten über einen Boolean, denn du mit dem Stop-Button setzt und dann wird abgebrochen, ungefähr so:

Code: Alles auswählen

var
  Form1: TForm1;
  Stop: boolean; //Zum Stoppen der Schleife
 
implementation
 
{ TForm1 }
 
//Start-Knopf:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Stop:= false;
  repeat
    //was auch immer in die Schleife soll
    Application.ProcessMessages;
  until Stop; //läuft solange, bis Stop gedrückt wird
end;
 
//Knopf zum Beenden
procedure TForm1.Button2Click(Sender: TObject);
begin
  Stop := true;
end;


Genial! Danke!!!!

Ich habe das Programm zwar zuerst ein paar mal in die Wüste geschickt, weil ich 'Application.ProcessMessages;' überlesen habe aber nun klappt es.

Ich hänge wohl noch zu sehr in FPC fest.

Gruß
Latze
Wer glaubt, etwas zu sein, hat aufgehört, etwas zu werden.

Jagged
Beiträge: 20
Registriert: So 21. Okt 2007, 11:05

Re: Schleifen in Lazarus (ähnlich FPC)

Beitrag von Jagged »

Vielleicht wäre hier auch ein Timer recht interessant :)

Latze
Beiträge: 60
Registriert: Sa 4. Jul 2009, 09:11
OS, Lazarus, FPC: Win7 / Linux (Lazarus 1.4.0)
CPU-Target: 32Bit/64Bit

Re: Schleifen in Lazarus (ähnlich FPC)

Beitrag von Latze »

Ich kann Dir leider nicht so ganz folgen. Meinst Du ein sleep (oder ähnliches / besseres) um die Prozessorlast ein wenig zu reduzieren? Das habe ich mit dem bereits erwähnten sleep schon gemacht, da ich das Programm auf einem Notebook nutzen möchte.

Gruß
Latze
Wer glaubt, etwas zu sein, hat aufgehört, etwas zu werden.

Jagged
Beiträge: 20
Registriert: So 21. Okt 2007, 11:05

Re: Schleifen in Lazarus (ähnlich FPC)

Beitrag von Jagged »

Erstelle doch mal einen Timer:

Code: Alles auswählen

Uses ....,ExtCtrls;
...
Var ATimer : TTimer;
Begin
TTimer: ATimer := TTimer.Create(NIL);


Dann setzt Du einen Event:

Code: Alles auswählen

ATimer.OnTimer := myTimerEvent;


Den Event an sich schreibst Du so :

Code: Alles auswählen

Procedure myTimerEvent(Sender : TObject);
Begin
  ...hier kommt rein was ausgeführt werden soll...
End;


mit ATimer.intervall kannst du einstellen wie schnell der event ausgelöst werden soll


Genauere Infos gibs hier: http://lazarus-ccr.sourceforge.net/docs ... timer.html

Gruß,
Jagged.

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Schleifen in Lazarus (ähnlich FPC)

Beitrag von Euklid »

Hallo,

Latze hat geschrieben:Ich kann Dir leider nicht so ganz folgen.


wenn du Lazarus startest, findest du im Reiter "System" die TTimer-Komponente. Die einfach auf die Form ziehen.
Wenn der Timer durch Timer.Enabled:=true aktiviert ist, wird das Ereignis OnTimer periodisch nach der in Timer.Interval festgehaltenen Zeitspanne (in Millisekunden) aufgerufen. Wenn du auf den Timer klickst, anschließend im Objektinspektor auf Ereignisse gehst und auf OnTimer doppelklickst, öffnet sich die Prozedur, die bei jedem Timer-Ereignis aufgerufen wird.

Eine genaue Anleitung gibt es hier: viewtopic.php?f=17&t=2613
Noch mehr Informationen hier: portal.php?cx=libsearch&query=TTimer

Viele Grüße, Euklid

hendy
Beiträge: 80
Registriert: Sa 11. Apr 2009, 17:01
OS, Lazarus, FPC: Windoof (L 0.9.26 FPC 2.2.2)
CPU-Target: 32Bit

Re: Schleifen in Lazarus (ähnlich FPC)

Beitrag von hendy »

Was ist der unterschied zwischen sleeptimer und dem normalem Timer?
Dankt monta !!

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Schleifen in Lazarus (ähnlich FPC)

Beitrag von theo »

hendy hat geschrieben:Was ist der unterschied zwischen sleeptimer und dem normalem Timer?

Meinst du TIdleTimer? viewtopic.php?t=677

Latze
Beiträge: 60
Registriert: Sa 4. Jul 2009, 09:11
OS, Lazarus, FPC: Win7 / Linux (Lazarus 1.4.0)
CPU-Target: 32Bit/64Bit

Re: Schleifen in Lazarus (ähnlich FPC)

Beitrag von Latze »

Und schon wieder was gelernt. :D

Hab das mal kurz überflogen. Nen' Timer werde ich wohl brauchen, wenn die Auswertung inkl. Anzeige so funktioniert, wie ich mir das vorstelle. Zur Zeit bin ich noch mit den Möglichkeiten am spielen, die ich unter Windows habe. Allein die Anzeige der Signalstärke (ich hab ProcessBars genommen) ist schon was ganz anderes als in einem DOS-Fenster. Da such ich mir gerade was zusammen, damit ich die, nicht zur Positionsbestimmung genutzten, Satelliten grau machen kann.

Gruß
Latze
Wer glaubt, etwas zu sein, hat aufgehört, etwas zu werden.

shokwave
Beiträge: 470
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: Schleifen in Lazarus (ähnlich FPC)

Beitrag von shokwave »

meinst du

Code: Alles auswählen

ProcessBar.enabled:=False;
:?:
mfg Ingo

Latze
Beiträge: 60
Registriert: Sa 4. Jul 2009, 09:11
OS, Lazarus, FPC: Win7 / Linux (Lazarus 1.4.0)
CPU-Target: 32Bit/64Bit

Re: Schleifen in Lazarus (ähnlich FPC)

Beitrag von Latze »

Ich habe einfach mal die ProgressBar (mein Schreibfehler) von einem Satelliten entsprechend disabled. Kein erkennbarer Unterschied in Farbe oder Funktion. Es gibt auch im Netz 'Erweiterungen', die es erlauben, die Farbe zu ändern. Bei diesem Programm würde mir zwar blau und grau reichen aber es kommen in Zukunft bestimmt Programme, wo ich auch andere Farben nutzen möchte. Also zum Beispiel grün gelb und rot um besser sichtbar zu machen, wie gut ein Wert ist.
Wer glaubt, etwas zu sein, hat aufgehört, etwas zu werden.

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Schleifen in Lazarus (ähnlich FPC)

Beitrag von monta »

Eventuell (aber ungetestet) das LED-Meter von hier:
http://wiki.lazarus.freepascal.org/RackCtls

Das wäre ja so ziemlich das, was du haben willst, wenn ich dich richtig verstanden hab.
Johannes

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Schleifen in Lazarus (ähnlich FPC)

Beitrag von theo »


Latze
Beiträge: 60
Registriert: Sa 4. Jul 2009, 09:11
OS, Lazarus, FPC: Win7 / Linux (Lazarus 1.4.0)
CPU-Target: 32Bit/64Bit

Re: Schleifen in Lazarus (ähnlich FPC)

Beitrag von Latze »

RackControls ist schon genial und bleibt bei mir auch bestehen. ColorProgress trifft mein Problem aber schon eher: Bei der Positionsbestimmung werden nicht unbedingt alle Satelliten genutzt aber trotzdem wird deren Rauschabstand übertragen. Die nicht genutzten Satelliten will ich eben grau färben, um sie zu kennzeichnen.

Danke
Latze
Wer glaubt, etwas zu sein, hat aufgehört, etwas zu werden.

Antworten