AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Umsetzung einer Art von EIngabeaufforderung
Thema durchsuchen
Ansicht
Themen-Optionen

Umsetzung einer Art von EIngabeaufforderung

Ein Thema von Nightfighter88 · begonnen am 24. Dez 2007 · letzter Beitrag vom 24. Dez 2007
Antwort Antwort
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#1

Re: Umsetzung einer Art von EIngabeaufforderung

  Alt 24. Dez 2007, 12:42
Hi und erstmal frohe Weihnachten, sowie Herzlich Willkommen in der DP

Was Dein Problem angeht, so wurde hier ja schon der Vorschlag mit der globalen Variable gemacht. Ist in der Situation (imho) das einfachste und geeigneste Verfahren, also ruhig so machen!

Aber trotzdem möchte ich kurz noch ergänzen, dass auch das Warten an sich möglich ist. Dazu kannst Du auf verschiedene Verfahren zurückgreifen. Das einfachste ist dabei, dass Du in einer Schleife wartest. Die Schleife darf dabei einfach erst verlassen werden, wenn ein bestimmtes Flag gesetzt wurde. Die Variable, die Du hier allerdings von der Paintbox zum OnClick des Button übertragen möchtest müsste auf jeden Fall global sein (also auch ein Flag), da die Signaturen bereits durch Delphi festgelegt sind.
An sich hast Du beim Warten in einer Schleife noch das Problem, dass so eine Schleife immer mit 100% CPU-Last ausgeführt wird (die Schleife nimmt alles, was Dein Programm an Rechenzeitbekommt), entsprechend wird das ganze Programm etwas träge weiterlaufen (garantiert nicht erwünscht). Deshalb musst Du in der Schleife dafür sorgen, dass hier das Programm nicht blockiert.

Die einfachste Variante stellt die Verwendung von Application.ProcessMessages dar, einfach in die Schleife rein und es wird bei jeder Iteration die Windows-Nachrichtenschleife abgearbeitet (das Fenster kann verschoben, andere Prozeduren gestartet werden).
Aber auch hier verschwendet man einfach eine Menge Ressourcen, da man völlig unnötig pollt (also ständig schaut, ob sich der Zustand/das Flag geändert hat). Besser ist es, wenn Du hier Ereignisorientierter Arbeitest. Dazu kannst Du einen Prozess mittels MsgWaitForMultipleObjects schlafen legen. Die genaue Syntax kannst Du dem Windows-API entnehmen, sollte sich aber auch in der DP leicht finden lassen. An sich ist die Verwendung schon etwas komplizierter, aber auch nicht wirklich schwer. An sich erlaubt Dir die Funktion eben, dass Du einen Thread schlafen legst, bestimmte Ereignisse aber noch verarbeitet werden (den Thread wieder aufwecken). Insbesondere kannst Du eben die Interaktion durch den Benutzer (Maus- und Tasturereignisse) zulassen. Der Vorteil ist dabei, dass wirklich nur dann etwas getan wird, wenn etwas passiert. Ansonsten schläft der Thread und verbraucht somit auch keine Ressourcen (erlaubt dann auch einer CPU, dass die sich schlafen legt).

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:13 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 by Thomas Breitkreuz