AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein gibt es eine Funktion, die das Ausführen einer Prozedure ...

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

Ein Thema von BAMatze · begonnen am 2. Sep 2008 · letzter Beitrag vom 2. Sep 2008
Antwort Antwort
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#1

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

  Alt 2. Sep 2008, 11:01
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 2. Sep 2008, 11:03
Wenn du dich nicht gerade in ihr befindest, wird diese nicht ausgeführt.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.619 Beiträge
 
#3

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

  Alt 2. Sep 2008, 11:07
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
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#4

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

  Alt 2. Sep 2008, 11:16
Zitat von Phoenix:
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).
  Mit Zitat antworten Zitat
tr909

Registriert seit: 5. Nov 2004
193 Beiträge
 
Turbo Delphi für Win32
 
#5

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

  Alt 2. Sep 2008, 11:24
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
  Mit Zitat antworten Zitat
Benutzerbild von Dunkel
Dunkel

Registriert seit: 26. Mär 2007
Ort: Klingenstadt
541 Beiträge
 
Delphi 2007 Enterprise
 
#6

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

  Alt 2. Sep 2008, 11:24
Hallo!

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?
Es ist zu wahr um schön zu sein...
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#7

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

  Alt 2. Sep 2008, 15:59
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.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 06:15 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