AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

lästiges beepen abstellen ??

Ein Thema von erniepb · begonnen am 11. Jun 2002 · letzter Beitrag vom 18. Jun 2019
Antwort Antwort
Seite 2 von 6     12 34     Letzte » 
jbg

Registriert seit: 12. Jun 2002
3.459 Beiträge
 
Delphi 10.1 Berlin Professional
 
#11
  Alt 12. Jun 2002, 09:27
Dann muss man einfach für jede Edit-Komponente die Ereignisbehandlungsroutine (EventHandler ist viel kürzer) auf dieselbe Methode setzen und nicht mehr über das FormKeyDown-Ereignis alle abfangen.

Oder man prüft mit Hilfe der Eigenschaft ActiveControl von TForm, welche Komponente gerade den Focus hat.
Z.B.:
Code:
if (ActiveControl <> nil) and not (ActiveControl is TMemo) then
begin
  { hier den vorherigen Code einfügen }
end;
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
6.003 Beiträge
 
Delphi 2010 Professional
 
#12
  Alt 12. Jun 2002, 09:29
Hallo toms,

dafür könnte man den ender benutzen:

Code:
   if Not (Sender is TMemo) then
   begin
       case Key of
          VK_RETURN, VK_TAB: begin // ENTER oder TAB-Taste erkannt
             Key := 0;
             Perform(WM_NextDlgCtl, ord(Shift = [ssShift]), 0);
             PeekMessage(Mgs, 0, WM_CHAR, WM_CHAR, PM_REMOVE); // Beep-Ton ausschalten
          end;
      end // für CASE Key OF
  end;
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.262 Beiträge
 
Delphi 2006 Professional
 
#13
  Alt 12. Jun 2002, 09:33
Moin Zusammen,

da VK_TAB nicht an die KeyDown, KeyUp und KeyPress weitergeleitet wird, könnte man die Abfrage darauf auch weglassen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.459 Beiträge
 
Delphi 10.1 Berlin Professional
 
#14
  Alt 12. Jun 2002, 09:35
Während ich meine zweite Idee eingearbeitet habe, hat MrSpock gepostet.

Der Parameter Sender ist im TForm1.FormKeyDown immer Form1, außer du rufst die Methode selbst mit anderem Parameter auf, oder du weist einer anderen Komponente diese Methode als OnKeyDown-Ereignis zu. Meine Lösung mit ActiveControl habe ich sowie deine mit Sender überprüft. Meine funktioniert, bei deiner ändert sich nichts. Obwohl es mit persönlich auch mit Sender besser gefallen hätte.
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#15
  Alt 12. Jun 2002, 10:40
Also Leute ok...ihr habt gewonen...

ich zeige hier die ganze Prozedur (so wie ich die wirklich benutze) , die meine Meinung nach keine Wünsche offen lässt...


Gruß

Paul Jr.


[code:1:1bd18cbf32]
(* Diese Prozedur sollte man in dem OnKeyDown Ereignis des Formulars aufrufen.
______________________________
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#16
  Alt 12. Jun 2002, 11:06
Hi,

Warum ist dein Code so seltsam formatiert?

Code:
procedure EnterTab(Sender: TObject; var Key: Word; Shift: TShiftState;
  ClassAus: array of TClass; ObjectAus: array of TObject;
  bESC_Close: Boolean = True);
var
  Mgs: TMsg;

  //_____________________________KAPSELUNG
  function ClassObjectAusschliessen: Boolean;
  var
    Index: Integer;
  begin
    Result := False;
    with Sender as TForm do
    begin
      for Index := Low(ClassAus) to High(ClassAus) do
        if ActiveControl is ClassAus[Index] then // Diese Classe ausschliessen
        begin
          Result := True;
          Exit;
        end;
      for Index := Low(ObjectAus) to High(ObjectAus) do
        if ActiveControl = ObjectAus[Index] then // Dieses Object ausschliessen
        begin
          Result := True;
          Break;
        end;
    end;
  end;

  //_______________________________HAUPTPROGRAMM
begin
  if Sender is TForm then
    with Sender as TForm do
    begin
      if (Shift = [ssShift]) then
        case Key of
          VK_RETURN: if not ClassObjectAusschliessen then
            begin
              // Shift + ENTER-Taste erkannt
              Key := 0;
              Perform(WM_NextDlgCtl, 1, 0);
              PeekMessage(Mgs, 0, WM_CHAR, WM_CHAR, PM_REMOVE);
              // Beep-Ton ausschalten
            end;
          VK_TAB: if ClassObjectAusschliessen then
            begin                   // ENTER-Taste erkannt
              Key := 0;
              Perform(WM_NextDlgCtl, 1, 0);
              PeekMessage(Mgs, 0, WM_CHAR, WM_CHAR, PM_REMOVE);
              // Beep-Ton ausschalten
            end;
        end // für CASE Key OF
      else
        case Key of
          VK_RETURN: if not ClassObjectAusschliessen then
            begin
              // ENTER-Taste erkannt
              Key := 0;
              Perform(WM_NextDlgCtl, 0, 0);
              PeekMessage(Mgs, 0,
                WM_CHAR, WM_CHAR, PM_REMOVE); // Beep-Ton ausschalten
            end;
          VK_TAB: if ClassObjectAusschliessen then
            begin
              // ENTER-Taste erkannt
              Key := 0;
              Perform(WM_NextDlgCtl, 0, 0);
              PeekMessage(Mgs, 0,
                WM_CHAR, WM_CHAR, PM_REMOVE); // Beep-Ton ausschalten
            end;
          VK_ESCAPE: if bESC_Close then
            begin
              Key := 0;
              Close;
              PeekMessage(Mgs, 0,
                WM_CHAR, WM_CHAR, PM_REMOVE); // Beep-Ton ausschalten
            end;
        end // für CASE Key OF
    end; // für WITH Sender As TForm DO
end;
Thomas
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#17
  Alt 12. Jun 2002, 11:24
Also Toms...für solche Fragen habe ich wirklich keine Zeit...sei mir nicht böse
Ich zeige jetzt hier, meine Meinung nach, eine sehr starke Prozedur und einziges was Dir dazu einfällt ist die Frage nach Formatierung...

__________________________________________________ _________
Nachtrag:

Programmierung Beispiele.


Um sich wirklich Bewusst zu werden wie Leistungsfähig so ein Konstrukt ist mache ich hier einpaar Einsatz- Beispiele mit verschiedenen Varianten.

Dazu erstellt man bitte ein neues Projekt und legt drauf z.B. drei TMemo (Memo1, Memo2, Memo3) und drei TEdit (Edit1, Edit2, Edit3) Komponenten.

Bitte die Eigenschaft des Formulars KeyPriview auf TRUE setzen und natürlich die Prozedur EnterTab in das Projekt aufnehmen (bei mir liegt diese natürlich in einer allgemeiner UNIT)

__________________________________________________ ________________
1.) Die Umwandlung ENTER --> TAB sollte in aller Komponenten wirksam werden

Darüber Hinaus bei ESC wird das Formular geschlossen


[code:1:14985e6b65]
PROCEDURE TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.459 Beiträge
 
Delphi 10.1 Berlin Professional
 
#18
  Alt 12. Jun 2002, 11:54
Ich optimiere den Code noch einmal
Code:
procedure EnterTab(Sender: TObject; var Key: Word; Shift: TShiftState;
  ClassAus: array of TClass; ObjectAus: array of TObject;
  bESC_Close: Boolean = True);
var
  Mgs: TMsg;

  //_____________________________KAPSELUNG
  function ClassObjectAusschliessen: Boolean;
  var
    Index: Integer;
  begin
    Result := True;
    with Sender as TForm do
    begin
      for Index := Low(ClassAus) to High(ClassAus) do
        if ActiveControl is ClassAus[Index] then // Diese Classe ausschliessen
          Exit;
      for Index := Low(ObjectAus) to High(ObjectAus) do
        if ActiveControl = ObjectAus[Index] then // Dieses Object ausschliessen
          Exit;
    end;
    Result := False;
  end;

  //_______________________________HAUPTPROGRAMM
begin
  if Sender is TForm then
    with Sender as TForm do
    begin
      case Key of
        VK_RETURN, VK_TAB: if not ClassObjectAusschliessen then
        begin
          Key := 0;
          Perform(WM_NextDlgCtl, ord(Shift = [ssShift]), 0);
          PeekMessage(Mgs, 0, WM_CHAR, WM_CHAR, PM_REMOVE); // Beep-Ton ausschalten
        end;
        VK_ESCAPE: if bESC_Close and (Shift <> [ssShift]) then
        begin
          Key := 0;
          Close;
          PeekMessage(Mgs, 0, WM_CHAR, WM_CHAR, PM_REMOVE); // Beep-Ton ausschalten
        end;
      end // case
    end; // für WITH Sender As TForm DO
end;
Sag mal Paul Jr. was hast du für eine Delphi-Version, oder schreibst du jedesmal das procedure der EventHandler in PROCEDURE um?
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#19
  Alt 12. Jun 2002, 12:14
Ok jbg

einverstanden...öffne Bitte ein neues Thema z.B.::

Code-Fromatierung

und erkläre mir DORT bitte was ich falsch mache (ich benutze Delphi5 und Delphi6 abwechslend (Enterprise)

Aber bitte NICHT hier...

Gruß

Paul Jr.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.317 Beiträge
 
Delphi 2006 Professional
 
#20
  Alt 12. Jun 2002, 12:41
HALT!

toms und jbg haben nur ganz simple Fragen gestellt. Bitte nicht persönlich angegriffen fühlen. OK?
Michael
Ein Teil meines Codes würde euch verunsichern.
  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 03:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf