![]() |
Eigenschaften eines Objektes für ein paar Sekunden zuweisen
Hallo
ich möchte die farbe von dem Button für nur eine Sekunde (Rot) und dann wieder die Originale Farbe zuweisen
Delphi-Quellcode:
Es funktioniert aber !!!
Button1.Color:=clRed;
//sleep(2000); // schlecht wie Delay() auch ! Pausen(1000); // das ist eine Funktion wie Sleep Button1.Color:=clWhite; während dieser 2 Sekunden wird alles gefroren das heißt mein Programm ist damit für 2 Sekunden lang tot :mrgreen: Wie kann ich die Farbe für 2 Sekunden ändern ohne das Programm zu stören? Oder muss ich unbedingt einen Timer verwenden ? |
Re: Eigenschaften eines Objektes für ein paar Sekunden zuwei
Wie sieht Pause() aus?
|
Re: Eigenschaften eines Objektes für ein paar Sekunden zuwei
versuchs mal mit
![]() |
Re: Eigenschaften eines Objektes für ein paar Sekunden zuwei
Timer oder Delay.
Für was soll das gut sein? ;) |
Re: Eigenschaften eines Objektes für ein paar Sekunden zuwei
Hi,
was schon in der Frage von mkinzler steckt (und wahrscheinlich Dein Problem ist), Warten kann die weitere Abarbeitung blockieren. Typische Beispiele währen eben sleep (da der aufrufende Thread schlafen gelegt wird, ganz ungünstig im Main - Thread) bzw. auch das Warten in einer While-Schleife (die z.B. per GetTickCount eine bestimmte Zeit abwartet). Es gibt dazu gleich verschiedene Lösungsansätze. Etwas unschön (aber funktionsfähig) ist die Verwendung einer Schleife, in der Du ständig Application.ProcessMessages aufrufst, also z.B.
Delphi-Quellcode:
Alternativ dazu kannst Du natürlich das Warten (bzw. auch das komplette Färben) in einen anderen Thread auslagern (achtung, der muss beim Zugriff auf den Button mit dem VCL - Mainthread synchronisiert werden). Legst Du den mittels sleep schlafen hat das keinen Effekt auf das restiliche Programm.
procedure wait(const delay: Cardinal);
var time: DWORD; begin time := GetTickCount; while (GetTickCount - time) < delay do Application.ProcessMessages; end; Eine weitere Möglichkeit (vielleicht die einfachste und schönste) ist es Delay zuverwenden (einfach mal in der Dp suchen). Da hat mal jmd. eine Funktion gepostet, die auf MsgWaitForMultipleObjects wartet, aber durch alle Ereignisse "aufgeweckt" wird, die Ereignisse abarbeitet und das Warten fortsetzt. Gruß, Der Unwissende |
Re: Eigenschaften eines Objektes für ein paar Sekunden zuwei
Ich habe Deine Funktion wait und auch Delay verwendet
Alle blockieren das Programm Das Button ruft einen Link ich gebe das Button mit Delay oder mit einer Funktion die Farbe rot solange das Button rot ist, ist das Button immer tot und ruft keinen Link auf ! ist die Farbe weg, dann funktioniert das Button wieder !!! Ich würde vielleicht einen Timer als letzte Lösung nehmen :cry: |
Re: Eigenschaften eines Objektes für ein paar Sekunden zuwei
Dann Poste doch mal den Code deiner Funktion
|
Re: Eigenschaften eines Objektes für ein paar Sekunden zuwei
Zitat:
Delphi-Quellcode:
procedure Pausen(Laps : Cardinal);
var Debe,fine : Cardinal; begin Debe := gettickcount; Fine := debe + Laps; while Fine>Debe do begin Debe := gettickcount; Application.ProcessMessages end; end; |
Re: Eigenschaften eines Objektes für ein paar Sekunden zuwei
Es sollte eigentlich so funktionieren, obwohl in deinem Code Application.ProccessMessages etwas (zu) oft aufgerufen wird.
Man sollte lieber passiv warten: ![]() |
Re: Eigenschaften eines Objektes für ein paar Sekunden zuwei
Vielen Dank mkinzler
Obwohl ich mein Problem mit einem Timer gelöst habe, habe ich wieder den Timer weg geschmissen. Ich habe den Delay (Passiv) getestet. Es funktioniert wunderbar und blockiert das Programm überhaupt nicht :thumb: gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz