Autor Beitrag
jeng
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Di 10.11.15 21:20 
Hallo,

Ich habe gerade das Problem, dass ich einen Teil einer Procedure nur einmal Ausführen darf.
Und da weiss ich nicht weiter.

Ich habe eine Scrollbar wenn ich die Anklicke/Betätige muss sie eimal $FF und dann $FB senden. Danach inkrement/dekrementieren 0 bis 100 rauf oder runter demach wie ich sie bewege, und das solange bis TScrollBar(Sender).Tag ändert.

Kann mir da vieleicht jemand weiter helfen?

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
procedure TMiniDOForm.PortDim(Sender: TObject);
var
  X,i: Integer;
  ExecOnce: Boolean; // diese als Public währe ein ansatz, nur weiss ich nich wo ich sie auf True setzen soll.
                     // wei diese procedure im OnChange event läuft.
   
begin
  X := 0;
  X := TScrollBar(Sender).Tag;
  TBar[X].OnClick := Nil;
  CurrentPort := X;

   if ExecOnce then  // Hier komme ich nicht weiter
      Begin
        Port[X] := #$FF// darf ich nur einmal senden
        DomoSend(Port[0], Port[1], Port[2], Port[3], Port[4], Port[5], Port[6], Port[7]);
        Sleep(50);
        Port[X] := #$FB ;// nach $FF muss ich diese zeile senden. Aber auch nur einmal
        DomoSend(Port[0], Port[1], Port[2], Port[3], Port[4], Port[5], Port[6], Port[7]);
        ExecOnce:= False;
      End
     else

  //Hier wird "Soll" dann gearbeitet, solange TScrollBar(Sender).Tag; nicht wechselt, 
  //ohne obriges nochmal auszuführen.

  for i := 0 to 100 do
    Begin
     Label10.Text := round(TBar[X].Value);
     Port[X] := Chr(round(TBar[X].Value));
    End;

  DomoSend(Port[0], Port[1], Port[2], Port[3], Port[4], Port[5], Port[6], Port[7]);

End;


Habe versucht das mit der variable ExecOnce zu machen, klappt aber nicht...

EDIT:
$FF muss ich senden um den port auf der letzen gedimmten "value"/ intensität wieder anzuschalten.
$FB sagt dem port, du musst jetzt dimmen.
von 0 - 100 / 100 -0 wird gedimmt.
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 10.11.15 22:07 
Deklariere doch einfach einen globalen Boolean als Flag, z.B. Gesendet : Boolean. Dann setzt du Gesendet in OnCreate auf False und fragst vor dem Senden ab, ob Gesendet noch immer False ist, woraufhin du bei False sendest und das Gesendet auf True setzt. (Oder: Ungesendet := True und beim Senden auf False setzen)

Für diesen Beitrag haben gedankt: jeng
jeng Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Mi 11.11.15 09:20 
user profile iconPerlsau hat folgendes geschrieben Zum zitierten Posting springen:
Deklariere doch einfach einen globalen Boolean als Flag, z.B. Gesendet : Boolean. Dann setzt du Gesendet in OnCreate auf False und fragst vor dem Senden ab, ob Gesendet noch immer False ist, woraufhin du bei False sendest und das Gesendet auf True setzt. (Oder: Ungesendet := True und beim Senden auf False setzen)


Guten Morgen,

Ja ist schon wie ich mir gedacht habe.
Nur kann Ich ExecOnce := False; nicht im OnChange Event deklarieren, weil diese Procedure in diesem Event läuft.
Ich habe nun einfach das OnClick event benutzt, um die Variable auf False zu setzen.

mfg
Jeng
OlafSt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Mi 11.11.15 11:21 
Formulieren wir es anders:

Deklariere ExecOnce als einen globalen Boolean.

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.

Für diesen Beitrag haben gedankt: jeng
jeng Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 30



BeitragVerfasst: Fr 13.11.15 16:26 
user profile iconOlafSt hat folgendes geschrieben Zum zitierten Posting springen:
Formulieren wir es anders:

Deklariere ExecOnce als einen globalen Boolean.


Ok habs geschnallt. ;-)

Danke

mfg
Jeng