TrackBar von Refresh ausnehmen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
haderlump
Beiträge: 185
Registriert: Fr 18. Jan 2013, 09:29
OS, Lazarus, FPC: Windows 10, Windows XP, Lazarus 1.6
CPU-Target: Celeron

TrackBar von Refresh ausnehmen

Beitrag von haderlump »

Hallo zusammen.
Ich wusste nun auch nicht wie ich den Titel richtig benenne.

Problem. Ich habe einen Trackbar eingesetzt um die Geschwindigkeit eines Motors zu steuern. Genauer gesagt mehrere Motoren.
Die Bar ist in einem Panel installiert, wo ich zwischen den Motoren umschalten kann. Es gibt da eine Timergesteuerten Refresh-Prozedure die die Parameter immer auf dem aktuellen Stand hält. Diese enthält unter anderem folgende Zeile:

Code: Alles auswählen

Hauptform.v_soll.position := round(fahrtreg[angezeigter_fahrtreg].v_soll); 

bei MouseUp soll der Schieberwert in die Variable fahrtreg[angezeigter_fahrtreg].v_soll übernommen werden.
Wenn ich nun den Schieber per Maus betätige bringt mir der Refresh den Schieber wieder an die alte Stelle noch bevor ich die Maus loslasse.
Nur bei ganz schneller betätigung der Maus kann ich einen neuen Wert einbringen. Ich muss also schneller sein als der Timer (95 msek).

ich müsste also diesen Punkt im Refresh überspringen, wenn der Schieber manuell betätigt wird.

Ich stelle mir das so vor: wenn Schieber gerade mit der Maus angewählt wird, -> obigen Punkt überspringen.

Ich habe nun noch kein geeignetes Kriterium beim Schieber gefunden, das ich abfragen kann.
Was würdet Ihr mir vorschlagen?

Danke im Voraus
Fritz

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: TrackBar von Refresh ausnehmen

Beitrag von wp_xyz »

Ich würde im OnMouseDown der Trackbar den Timer ausschalten (Timer1.Enabled := false) und im OnMouseUp, nachdem der neue Wert eingetragen ist, wieder aktivieren.

haderlump
Beiträge: 185
Registriert: Fr 18. Jan 2013, 09:29
OS, Lazarus, FPC: Windows 10, Windows XP, Lazarus 1.6
CPU-Target: Celeron

Re: TrackBar von Refresh ausnehmen

Beitrag von haderlump »

Ja so ähnlich habe ich das gemacht.
Ich habe eine globale boolsche Variable definiert, di ich im Mousedown-Event setze, bei MouseUp gebe ich sie wieder frei. Den Timer kann ich nicht unterbrechen, da dort Bremsvorgänge stattfinden können, die ich nicht unterbrechen darf.
Aber im Refreschteil wird dann der Refresh des besagten Reglers übersprungen.
Eigentlich ganz einfach, aber manchmal verbeißt man sich in eine falsche Idee.
Gruß Fritz

Antworten