AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi OnKeyDown/Press Ereignis bei dynamisch erzeugtem Edit

OnKeyDown/Press Ereignis bei dynamisch erzeugtem Edit

Ein Thema von Exciter · begonnen am 2. Jan 2003 · letzter Beitrag vom 4. Jan 2003
Antwort Antwort
Seite 1 von 3  1 23   
Exciter

Registriert seit: 28. Nov 2002
13 Beiträge
 
#1

OnKeyDown/Press Ereignis bei dynamisch erzeugtem Edit

  Alt 2. Jan 2003, 03:17
Moin zusammen !

Ich möchte bei einem dynamisch erzeugtem TEdit auf ein OnKeyDown/Press Ereignis reagieren. Ich hab' mir diesen Thread durchgelesen http://www.delphipraxis.net/viewtopic.php?t=1934. Mir ist aber nicht klar wie ich die Methode deklarieren muss. Ein kurzes Beispiel wäre super !
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 2. Jan 2003, 04:37
Moin Exicter,

prima, dass Du schon mal angefangen hast Dich schlau zu machen.

Diese Methode(n) sollten dort deklariert werden, wo auch die anderen Methoden des Formulares stehen.
Oben in der Unit hast Du ja so etwas wie:

Delphi-Quellcode:
TForm1 = class(TForm)
  // Hier stehen jetzt alle möglichen Komponenten, die Du auf dem Formular hast
  // und auch die Ereignisprozeduren
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
Dort bringst Du auch Deine eigenen Prozeduren unter:

Delphi-Quellcode:
TForm1 = class(TForm)
  //...
  procedure MeinKeyPress(Sender: TObject; var Key: Char);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
jetzt fehlt nur noch im implementation Abschnitt die eigentliche Prozedur

Delphi-Quellcode:
implementation

procedure TForm1.MeinKeyPress(Sender: TObject; var Key: Char);
begin
  // Was auch immer passieren soll
end;
und zugewiesen wird's dann meist an der Stelle, an der man die Komponente dynamisch erzeugt.
Hier mal als Beispiel im FormCreate.

Delphi-Quellcode:
procedure TfrmMAIN.FormCreate(Sender: TObject);
begin
  with TEdit.Create(self) do
  begin
    // Was auch immer sonst noch für das TEdit angegeben werden soll
    OnKeyDown := MeinKeyDown;
  end;
end;
Du kannst natürlich auch jede beliebige andere schon existierende Methode so zuweisen, solange die Parameterliste mit der erforderlichen übereinstimmt.
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
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#3
  Alt 2. Jan 2003, 11:40
Mal eine Frage:
  1. Bei der einfachen VCL-Programmierung wird ButtonXClick(Sender: TObject) genommen
  2. Bei Komponenten muss man aber TMyButton.Click (ohne irgendwas) nehmen
Und bei nonVCL ist es glaube ich auch noch mal anders.
Kann mir das mal bitte erklären? Ich dachte Delphi wäre einigermaßen logisch...

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

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 2. Jan 2003, 11:49
Moin Chris,

Deine Punkte 1 und 2 sind aber identisch.

In beiden Fällen handelt es sich um eine OnClick Routine.
Im ersten Falle als Methode eines Formulares (die dann einem Button zugewiesen wird), im zweiten die eines Button. (bei der ersten gehört ja wohl auch noch ein TForm1. o.ä. davor )
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
Exciter

Registriert seit: 28. Nov 2002
13 Beiträge
 
#5
  Alt 2. Jan 2003, 16:20
Moin Moin !

Gesagt getan. Funzt aber nicht ...
(Das ganze soll ein Chat mit Private Messages werden und für jeden Chat/jede PM soll ein eigener TabSheet mit nem Edit/ListView erstellt werden)

Code:
  ...
  NewTab := TTabSheet.Create(Form1.PageControl3);
  NewTab.PageControl := Form1.PageControl3;
  NewEdit := TEdit.Create(NewTab);
  NewListView := TListView.Create(NewTab);
  TWinControl(NewEdit).parent := NewTab;
  TWinControl(NewListView).parent := NewTab;
  OnKeyDown := MeinKeyDown;
end;
Das funzt auch alles soweit. Nur passiert nix, wenn ich im Programm auf 'Return' drück'.
Code:
procedure TForm1.MeinKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

begin
If (Key= (VK_RETURN)) And Not (NewEdit.Text='') Then
   begin ....
und hier das nächste Problem: Wie kann ich jetzt etwas mit dem eben erstelltem ListView anstellen ??

Thx für die Hilfe
Patrick
  Mit Zitat antworten Zitat
Helld_River

Registriert seit: 2. Jan 2003
Ort: Hürth
136 Beiträge
 
Delphi 2010 Professional
 
#6
  Alt 2. Jan 2003, 16:30
blöde Frage, aber hast Du bei deinem Formular KeyPreview auf TRUE gesetzt ?
Was ich bei deinem Code nicht verstehe, ist die Zuweisung

OnKeyDown:=MeinKeyDown;

Zu welcher Komponente gehört dieses OnKeyDown ?
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#7
  Alt 2. Jan 2003, 16:32
Vermutlich zu TForm1
Du schreibst ja auch Canvas.Draw und nicht Form1.Canvas.Draw (denk ich doch mal)...

Chris
  Mit Zitat antworten Zitat
Helld_River

Registriert seit: 2. Jan 2003
Ort: Hürth
136 Beiträge
 
Delphi 2010 Professional
 
#8
  Alt 2. Jan 2003, 16:38
Könnte hinkommen !
Wenn ich das Problem aber richtig verstanden habe, dann möchte Exciter doch auf ein Tastaturereignis vom dynamisch erzeugten TEdit reagieren, somit müsste doch MeinKeyDown an NewEdit zugewiesen werden, oder ?
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#9
  Alt 2. Jan 2003, 16:40
Jepp, dann müsste es wirklich NewEdit.OnKeyDown heißen. Er kann es so lassen, wenn Form.KeyPreview = true ist...

Chris
  Mit Zitat antworten Zitat
Exciter

Registriert seit: 28. Nov 2002
13 Beiträge
 
#10
  Alt 2. Jan 2003, 16:56
Ääääh hmmm ...

Also:
- KeyPreview ist true.
- OnKeyDown:=MeinKeyDown; sollte für's dynamisch erstellte TEdit sein.
Zitat:
Könnte hinkommen !
Wenn ich das Problem aber richtig verstanden habe, dann möchte Exciter doch auf ein Tastaturereignis vom dynamisch erzeugten TEdit reagieren, somit müsste doch MeinKeyDown an NewEdit zugewiesen werden, oder ?
Genau das hatte ich eigentlich vor !

Patrick
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

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 11:57 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