Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   gibt es eine Funktion, die das Ausführen einer Prozedure ... (https://www.delphipraxis.net/119859-gibt-es-eine-funktion-die-das-ausfuehren-einer-prozedure.html)

BAMatze 2. Sep 2008 11:01


gibt es eine Funktion, die das Ausführen einer Prozedure ...
 
Hallo

ich wollte mal wissen, ob es eine Funktion/ Prozedure gibt in Delphi, die überprüfen kann, ob eine andere Funktion ausgeführt wird oder nicht.

Wahrscheinlich fragt ihr euch gerade was meint er?? Also folgendes: Ich möchte in einem Edit überprüfen ob die onkeydown-Funktion für die Delete-Taste wahr ist (also gedrückt ist) oder falsch (ist nicht gedrückt). Ich weiß zu diesem Thema wurde schon viel gepostet, die meisten haben mit key: word auch anscheinend ein ausreichendes Ergebnis erreicht. Die mir zur verfügungstehende Funktion unterstützt aber nur key: Char. Ich habe eine ähnliche Funktion gefunnden Assigned, aber mit der noch nicht wirklich viel anfangen können. Hoffe ihr könnt mir wieder helfen.

Danke

mkinzler 2. Sep 2008 11:03

Re: gibt es eine Funktion, die das Ausführen einer Prozedure
 
Wenn du dich nicht gerade in ihr befindest, wird diese nicht ausgeführt.

Phoenix 2. Sep 2008 11:07

Re: gibt es eine Funktion, die das Ausführen einer Prozedure
 
Zitat:

Zitat von BAMatze
ob die onkeydown-Funktion für die Delete-Taste wahr ist (also gedrückt ist) oder falsch (ist nicht gedrückt).

Eine Funktion kann nicht wahr oder falsch sein.

Wenn die Taste gedrückt wird, dann wird dieses Event (die Funktion ist 'nur' der Eventhandler) einmal (kurz) ausgeführt.
Das heisst, auch wenn die Taste noch weiter gedrückt wird: Die Funktion wurde nur einmal direkt beim Event (also beim Drücken selber) ausgeführt und danach eben nicht mehr.

Eine Idee wäre es, im OnKeyDown Event, wenn Delete gedrückt wurde, ein Flag zu setzen. IsDeletePressed := true;
Und im OnKeyUp-Event, wenn die Taste eben wieder losgelassen wurde, das Flag auf false zurück zu setzen.

Hier gibts auch noch ein paar Hintergrundinfos zu den Key Events: http://delphi.about.com/od/objectpas...ard_events.htm

BAMatze 2. Sep 2008 11:16

Re: gibt es eine Funktion, die das Ausführen einer Prozedure
 
Zitat:

Zitat von Phoenix
Zitat:

Zitat von BAMatze
ob die onkeydown-Funktion für die Delete-Taste wahr ist (also gedrückt ist) oder falsch (ist nicht gedrückt).

Eine Idee wäre es, im OnKeyDown Event, wenn Delete gedrückt wurde, ein Flag zu setzen. IsDeletePressed := true;
Und im OnKeyUp-Event, wenn die Taste eben wieder losgelassen wurde, das Flag auf false zurück zu setzen.

/a/keyboard_events.htm

selbst dann müsste es doch eine Funktion geben, die genau das macht, was ich möchte, denn die Entfernentaste wird nicht erkannt in einer Editkomponente (genauso wie die F-Tasten und noch ein paar mehr).

tr909 2. Sep 2008 11:24

Re: gibt es eine Funktion, die das Ausführen einer Prozedure
 
Wenn du irgendetwas ausführen möchtest wenn die Delete-Taste gedrückt wird, packst du einfach in das OnKeyDown-Event vom edit-feld:
Code:
if key = vk_delete then
 tut irgendwas
für die f-tasten, etc. guckst du z.B. unter http://www.help-guide.de/win_virtual_key.htm

Gruß
tr909

Dunkel 2. Sep 2008 11:24

Re: gibt es eine Funktion, die das Ausführen einer Prozedure
 
Hallo!

Zitat:

Zitat von BAMatze
ich wollte mal wissen, ob es eine Funktion/ Prozedure gibt in Delphi, die überprüfen kann, ob eine andere Funktion ausgeführt wird oder nicht.

Obwohl Windows ein Multitasking-Betriebssystem ist, läuft jedes Programm sequentiell vom Startzeitpunkt bis zur Termination durch, Zeile für Zeile, nichts wird simultan ausgeführt. In sofern macht Deine Frage überhaupt keinen Sinn.

Anders sieht es aus, wenn Du Dein Programm in mehrere Threads aufteilst, welche neben dem Hauptthread Berechnungen durchführen. Dann wird (vorausgesetzt Du hast entsprechend viele CPU-Kerne wie Threads) wirklich simultan an mehrerern Stellen des Programmcodes gewerkelt. Mit nur einem CPU-Kern wird nach wie vor alles schön hintereinander berechnet.


Dein Problem mit den "nicht erkannten Tasten in einem Editfeld" rührt daher, dass das Editfeld die entsprechenden Windows-Messages der Tastendrücke für sich vereinnahmt, das Programm nichts davon mitkriegt. Was hast Du vor, wo liegt Dein Problem?

BAMatze 2. Sep 2008 15:59

Re: gibt es eine Funktion, die das Ausführen einer Prozedure
 
Hallo noch mal an alle,

Hat zwar etwas gedauert aber mit euren Hinweisen und etwas probieren und lesen hat es nun geklappt. Bei der onkeydown-Funktion das Edit-Fensters wird im gegensatz zur onkeypress-Funktion das Key als Word und nicht als Char übergeben. So konnte ich das vk_delete benutzen und es funktioniert. Für andere die das gleiche Problem haben hier die endgültige Version:

Delphi-Quellcode:

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var iIndex, iTemp: integer;

begin
  if key = vk_delete then
    begin
      //Löscht einen markierten Bereich im Editfenster (Vorraussetzung es ist etwas markiert!!)
      if Edit1.SelLength >0 then
        begin
          iEditpos := Edit1.SelStart;
          for iTemp := 0 to Edit1.SelLength - 1 do if Tisch[iIndex].sEditWert[iTemp] = #44
                                                  then Tisch[iIndex].bTastenregistrierung := false;
          delete(Tisch[iIndex].sEditWert,Edit1.SelStart+1,Edit1.SelLength);
        end
      //Löscht das Zeichen nach dem Cursor (Voraussetzung es ist nichts markiert)
      else
        begin
          iEditPos := Edit1.SelStart - 1;
          if Tisch[iIndex].sEditWert[Edit1.SelStart] = #44 then Tisch[iIndex].bTastenregistrierung := false;
          delete(Tisch[iIndex].sEditWert,Edit1.SelStart+1,1);
          iEditPos := iEditPos + 1;
        end;
    end;
end;
Wie gesagt, wichtig war bei mir die Initialisierung des Keys als Word und nicht als Char.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz