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 2 von 3     12 3   
Helld_River

Registriert seit: 2. Jan 2003
Ort: Hürth
136 Beiträge
 
Delphi 2010 Professional
 
#11
  Alt 2. Jan 2003, 16:02
Dann musst Du auch

NewEdit.OnKeyDown:=MeinKeyDown;

schreiben !!!
  Mit Zitat antworten Zitat
Exciter

Registriert seit: 28. Nov 2002
13 Beiträge
 
#12
  Alt 2. Jan 2003, 16:39
OK

Aber dann krieg ich oben bei der Deklaration die Meldung:
'Ungenügende Forward- oder External-Deklaration: TForm1.MyKeyDown'
  Mit Zitat antworten Zitat
Helld_River

Registriert seit: 2. Jan 2003
Ort: Hürth
136 Beiträge
 
Delphi 2010 Professional
 
#13
  Alt 2. Jan 2003, 17:26
Sorry, aber das müsste ich mir genauer anschauen, habe nur im Moment nicht die zeit dazu. Stell doch mal einfach etwas mehr Quellcode rein, am besten die ganze Unit (wenn nicht zu groß) und ich versuche es mir heute NAcht anzuschauen.

Gruß, Helld
  Mit Zitat antworten Zitat
Exciter

Registriert seit: 28. Nov 2002
13 Beiträge
 
#14
  Alt 2. Jan 2003, 18:40
OK, alles wär vielleicht ein wenig lang ...
ich poste mal die Teile die ich für diese Prozedur erstellt/geändert hab:
Code:
interface
...
uses
...
type
...
procedure MeinKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

implementation
...
procedure TForm1.Server1PrivMsg(Sender: TComponent; Nick, Msg: String);
var NewTab    : TTabSheet;
     NewChat   : TListView;
     NewEdit   : TEdit;
     Item      : TListItem;
begin
  NewTab := TTabSheet.Create(Form1.PageControl3);
  NewTab.Visible := True;
  NewTab.Caption := Nick;
  NewTab.PageControl := Form1.PageControl3;
  Form1.PageControl3.ActivePage := NewTab;
  NewEdit := TEdit.Create(NewTab);
  NewChat := TListView.Create(NewTab);
  TWinControl(NewEdit).parent := NewTab;
  TWinControl(NewChat).parent := NewTab;
  NewEdit.Align := AlBottom;
  NewChat.Align := alClient;
  NewChat.ViewStyle := vsReport;
  NewChat.ShowColumnHeaders := True;
  NewChat.Columns.Add;
  NewChat.Column[0].Caption := 'Time';
  NewChat.Columns.Add;
  NewChat.Column[1].Caption := 'User';
  NewChat.Column[1].Width := 100;
  NewChat.Columns.Add;
  NewChat.Column[2].Caption := 'Message';
  NewChat.Column[2].AutoSize := True;
  Item:=NewChat.Items.Add;
  Item.Caption := TimeToStr(Time);
  Item.SubItems.Add('<'+ Nick +'>');
  Item.SubItems.Add(Msg);
 NewEdit.OnKeyDown:=MeinKeyDown;
end;

procedure MeinKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var NewEdit : ???; //soll sich auf das oben erstellte TEdit beziehen
    NewChat : ???; //soll sich auf das oben erstellte TListView beziehen
    Nick   : String;
    Item   : TListItem;

begin
  If (Key = (VK_RETURN)) And Not (NewEdit.Text='') Then
  begin
    Nick := ??? wie krieg ich den String 'Nick' aus 'Server1PrivateMsg' jetzt hier hin ?
    Server1.SendPrivMsg(Nick, Trim(NewEdit.Text));
    Item:=NewChat.Items.Add;
    Item.Caption := TimeToStr(Time);
    Item.SubItems.Add('Ich ->');
    Item.SubItems.Add(NewEdit.Text);}
  end;
end;
Ich mach' das mit der dynamischen Erzeugung zum ersten Mal. Deswegen hab ich auch keine Ahnung wie ich die Variablen (NewEdit,NewChat,Nick) richtig deklariere, damit ich die in der OnKeyDown Prozedur verwenden kann (Server1.SendPrivMsg muss ja wissen wer 'Nick' ist)
  Mit Zitat antworten Zitat
Exciter

Registriert seit: 28. Nov 2002
13 Beiträge
 
#15
  Alt 3. Jan 2003, 07:54
Moin !

Arrrgh Ich hab das TForm1 vor OnKeyDown vergessen.


Code:
procedure TForm1.MeinKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
Das OnKeyDown Ereignis funzt jetzt
Nun hab ich aber immer noch das Problem, dass ich nicht weiss wie ich mit meinem dyn. erstelltem TListView und TEdit in der TForm1.MeinKeyDown - Prozedur weiter arbeiten kann (Es kann ja auch vorkommen, dass mehrere erstellt werden).
  Mit Zitat antworten Zitat
Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#16
  Alt 3. Jan 2003, 08:09
Ich glaube FindCompenent hilft dir dort, es gibt da aber auch noch die möglichkeit über nen array deine dyn. komps anzulegen. dann kannst du über nen array auf die kompos zugreifen.
Christian "phlux" Arndt
  Mit Zitat antworten Zitat
Exciter

Registriert seit: 28. Nov 2002
13 Beiträge
 
#17
  Alt 3. Jan 2003, 15:55
Ok,

sagen wir, ich krieg 4 Nachrichten von unterschiedlichen Usern. Dann wird pro Nachricht, auf dem PageControl ein Tabsheet erzeugt und darauf jeweils ein TEdit und ein TListView als Array[0..3] of TEdit/TListView.
Nun kann ich in der nächsten Prozedur über den Index[0] bis [3] ja darauf zugreifen. Aber woher weiss ich, welcher Index zu dem jeweiligen User gehört ???
Kann ich da nicht etwas mit dem Username string anfangen, den ich bei jeder Nachricht zur Verfügung hab ?
Ich hab versucht, den dyn. erzeugten Komponenten die Namen der untersch. User zu geben. Dann hab' ich aber immer die Namen in den TEdits stehen und Exceptions bei den TListViews

Kann mir mal bitte jemand erklären wie man's richtig macht ?!
  Mit Zitat antworten Zitat
Helld_River

Registriert seit: 2. Jan 2003
Ort: Hürth
136 Beiträge
 
Delphi 2010 Professional
 
#18
  Alt 3. Jan 2003, 18:22
Hi !
Versuch doch mal etwas in folgender Richtung:

Code:
  TKomp : record
           Name : string;
           Kedit : TEdit;
           KListView : TListView;
         end;

var LaengeArray : integer;
    Komp : TKomp;
    xyz : array of Komp; //dynamisches Array
   

//Array initialisieren
  LaengeArray:=0;
  SetLength(xyz,LaengeArray);

//über SetLength kannst Du das Array auch erweitern, einfach LaengeArray hochsetzten und dann wieder SetLength aufrufen
Schau sonst einfach mal in der DelphiHilfe unter "dynamische Arrays" nach.

Gruß, Helld
  Mit Zitat antworten Zitat
Exciter

Registriert seit: 28. Nov 2002
13 Beiträge
 
#19
  Alt 3. Jan 2003, 18:40
Hi Helld

Also ich ich hab' kein Problem damit das Array zu erstellen, sondern in der nächsten Prozedur (mein OnKeyDown vom dyn. TEdit) herauszufinden, von welchem TEdit das OnKeyDown-Ereignis ausging !
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#20
  Alt 3. Jan 2003, 18:56
Moin Exciter,

dafür kannst Du den Parameter Sender verwenden.
Wenn Du vorab Deinen Edits in der Eigenschaft Tag noch eine genaue ID verpasst hast gehts sogar noch einfacher, ansonsten wirst Du wohl den Namen nehmen müssen:

z.B.

Delphi-Quellcode:
if Sender ist TEdit then
begin
  if TEdit(Sender).Name = 'Edit1then
  begin
    // Irgendetwas tun
    exit;
  end;
  if TEdit(Sender).Name = 'Edit2then
  begin
    // Irgendetwas tun
    exit;
  end;
end;
Wenn Du die Eigenschaft Tag verwendest, kannst Du das sogar ganz einfach über eine case Anweisung handeln.
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
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 01:21 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