Announcement

Collapse
No announcement yet.

Verhindern der Bildschirmaktualisierungen (flackern)

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

  • Verhindern der Bildschirmaktualisierungen (flackern)

    Hallo Leute,

    gibt es unter Delphi 5 eine Möglichkeit die Bildschirmaktualisierung in einer Form abzuschaltenum einige Anpassungen vorzunehmen und anschliessend die Aktualisierung des Bildschirm in einem Rutsch sichtbar zu machen?

  • #2
    Hallo Ingo,

    Also eigentlich sollte auf deiner Form nichts flackern. Ich kenne jetzt nicht genau dein Problem aber kann es sein, daß du irgendwas im Ereignis OnPaint oder mit Refresh oder repaint falsch machst?

    Gruß Fred Ziebel

    Comment


    • #3
      Hallo Fred,

      tja leider hängt der Hintergrund nicht in einem OnPaint ereignis sondern auf der Form ist eine Komponente (Reservierungskalender)
      Diese Komponente lädt aus einem Stream beim Datumswechsel die Reservierungsdaten neu ein. Allerdings kann die Komponente mit verschiedenen Tageslayouts ( aktiv 9-18, Anzeige in 10 Minutenschritten, etc.) arbeiten. Werden die Daten aus einem Stream eingelesen muss immer erst die Standrdeinstellung der Komponenete gewählt werden, Daten einlesen und gewünschte Einteilung einstellen. Leider kann ich nicht verhindern das nach der Einstellungsaktualisierung die Komponente neu gezeichnet wird. Darum würde ich gerne die komplette Form oder Bildschirmaktualisierung abschalten

      Comment


      • #4
        Puh...ich muß gestehen, daß ich keine Möglichkeit kenne Delphi bzw. Windows explizit einen Window-refresh zu verbieten. Aber ich glaube ich habe auch nach deiner zweiten Message, dein Problem nicht ganz verstanden. Wenn Delphi im Programmablauf keinen Grund sieht, eine Form neu zu zeichnen, deine Komponente aber sehr wohl, dann muß doch mit Sicherheit an der Komponente etwas geändert werden. Irgendwoher muß die Aktualisierungsorder ja kommen.

        Gruß Fred Ziebel

        Comment


        • #5
          Hallo,<br>
          try<br>
          LockWindowUpdate(Form1.handle); // Bildaufbau sperren<br>
          ... <br>
          finally<br>
          LockWindowUpdate(0); // Bildaufbau wieder zulassen<br>
          end;<br>
          <br>
          Dietma

          Comment


          • #6
            Hi

            <pre>

            SendMessage(Handle, wm_SetRedraw, 0, 0);

            und

            SendMessage(Handle, wm_SetRedraw, 1, 0);

            </pre>

            ersteres schaltet das Neuzeichnen aus und zweiteres wieder ein, es sind KEINE verschachtelten Aufrufe möglich, bzw. haben keinen Effekt.

            Im Grunde wird die Neudarstellung NICHT verhindert/eliminiert, sondern NUR der Zeichengerätecontext (DC, Canvas) des Fensters gesperrt.
            Das gleiche macht LockWindowsUpdate() nur das dort beim "unlocken" unmögliche Seiteneffekte auftreten können. (z.B. Neuzeichnen des kompletten Desktops, Flackern). Beim Unlocking mit wm_Setredraw wird NICHTS neugezeichnet, Du mußt Dich also selber darum kümmern. Am besten mit:

            <pre>

            RedrawWindow(Handle, nil, 0, RDW_INVALIDATE or RDW_ALLCHILDREN or RDW_UPDATENOW);

            </pre>

            Gruß Hage

            Comment

            Working...
            X