Announcement

Collapse
No announcement yet.

timer zur laufzeit erstellen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • timer zur laufzeit erstellen

    wie erstelle ich einen timer zur laufzeit, weise dem ontimer-ereignis einen code zu und wenn eine
    prüfung im ontimer-ereignis "wahr" ist soll der timer wieder gelöscht werden.

    zur praxis: ich möchte eine einrastfunktion für tasten programmieren und wenn der anwender eine
    checkbox angeklickt hat, soll nach einer eingestellten zeit vom anwender die taste danach wieder
    "austrasten" = nicht gedrückt. wenn die checkbox nicht angeklickt ist, brauche ich den timer nicht
    und deswegen soll er dann wieder aus dem speicher entfernt werden, da er sonst nur resourcen frißt!!!!

    mfg

    markus
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

  • #2
    Hallo Markus,

    die <b>TTimer</b>-Komponente der VCL hat bereits alle Eigenschaften, die Du suchst. Immer dann, wenn die Timer-Eigenschaft <b>Enabled</b> auf False gesetzt wird, zerstört die VCL über <b>KillTimer</b> den Win32-Timer:
    <pre>
    procedure TTimer.SetEnabled(Value: Boolean);
    begin
    if Value <> FEnabled then
    begin
    FEnabled := Value;
    UpdateTimer;
    end;
    end;
    //
    procedure TTimer.UpdateTimer;
    begin
    KillTimer(FWindowHandle, 1);
    if (FInterval <> 0) and FEnabled and Assigned(FOnTimer) then
    if SetTimer(FWindowHandle, 1, FInterval, nil) = 0 then
    raise EOutOfResources.Create(SNoTimers);
    end;

    </pre&gt

    Comment


    • #3
      den code kapiere ich auf anhieb nicht so ganz, aber ich probiere es zuhause in ruhe aus!!

      mfg

      marku
      Herzliche Grüße

      Markus Lemcke
      barrierefreies Webdesign

      Comment


      • #4
        Hallo Markus,

        mein Beispiel stammt bereits aus der <b>VCL</b>, d.h. Du musst gar nichts zusätzlich machen. Die TTimer-Komponente macht alle notwendigen Schritte automatisch im Hintergrund, wenn <b>Enabled</b> auf False gesetzt wird.

        Immer dann, wenn Du den Timer deaktivieren willst, reicht es aus, im eigenen Programm nur eine einzige Zeile aufzurufen:
        <pre>
        Timer1.Enabled := False;
        </pre>
        Die VCL ruft dann automatisch die Methode <b>UpdateTimer</b> auf, und entsorgt den Win32-Timer über den <b>KillTimer</b>-Aufruf

        Comment


        • #5
          wenn ich ihn dann wieder haben will muß ich ihn mit create erstellen oder enabled := true???

          mfg

          markus

          p.s. killtimer ist eine api-funktion oder??
          Herzliche Grüße

          Markus Lemcke
          barrierefreies Webdesign

          Comment


          • #6
            Hallo Markus,

            genau - mit <i>Enabled := true</i> richtet die VCL den Timer wieder ein. Da die Timer direkt von Win32 kommen (also keine Sachen sind, die von Delphi implementiert werden), sind die Funktionen wie KillTimer etc. auch API-Funktionen. Wenn Du die STRG-Taste gedrück hälst und den Aufruf von KillTimer mit der linken Maustaste anklickst, springt Delphi automatisch in die Unit, in der diese Funktion/Methode implementiert wird. Und bei KillTimer landest Du in <i>Windows.pas</i>

            Comment


            • #7
              okay, das problem habe ich im griff!!!! besten dank!!!!!

              mfg

              marku
              Herzliche Grüße

              Markus Lemcke
              barrierefreies Webdesign

              Comment

              Working...
              X