Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Self funktoniert bei edit nicht ?


Kokel - So 20.02.05 20:59
Titel: Self funktoniert bei edit nicht ?
Ich krieg hier noch ein fön.
Da habe ich eine edit komponente und beim ändern des Feldes soll eine Messagebox angezeigt werden . Danach soll mit ebuttonw.onkeypress so getan werden als hätte der benutzer die Backspace taste getippt . so das statt z.B. 500 nur noch 50 im editfelt steht. Aber daran haperts dann auch.
Hier also der code: :cry:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.EbuttonwChange(Sender: TObject);
var a:char;
begin
a:=chr(8);
If ebuttonw.Text='' then exit;
If strtoint(ebuttonw.Text) > 400 then begin
        showmessage('Nicht mehr als 400 Bildpunkte !');
        Ebuttonw.OnKeyPress(self,a); // imitiere den druck der backspacetaste
        exit;   // und raus
    end;// if
    buttonw:=strtoint(ebuttonw.Text);
    setzewerte;
  end;

procedure TForm1.EbuttonwKeyPress(Sender: TObject; var Key: Char);
begin
If not (key in ['0'..'9',chr(8)]) then key:=#0;

end;


Delete - So 20.02.05 21:56

warum entfernste nicht einfach das letzte Zeichen des Strings aus dem Edit-Feld?


Kokel - So 20.02.05 22:04

Ich wollte mal sehen ob ich das auch mit dem self befehl hinkriege.
Aber ich denke ich laß das mal besser.
Wäre für mich interessant gewesen das mal so zu versuchen.
Trotzdem danke für den tip one of ten.


Sprint - So 20.02.05 23:38
Titel: Re: Self funktoniert bei edit nicht ?
Kokel hat folgendes geschrieben:
Danach soll mit ebuttonw.onkeypress so getan werden als hätte der benutzer die Backspace taste getippt .

Wenn du auf der Tastatur die Entf Taste drückst, guckt Windows nach welches Fenster den Fokus hat und sendet dann an das Fenster (z.B. TEdit) eine Nachricht. Die VCL nimmt diese Nachricht entgegen und guckt ob du z.B. OnKeyPress Ereignis zugewiesen hast. Sollte es so sein, wird dieses Ereignis ausgelöst. Um nun das gleiche Verhalten in deinem Programm zu simulieren, musst du entweder einen Tastendruck mit keybd_event simulieren oder halt an das Fensterhandle eine Tastendruck Nachricht per SendMessage bzw. PostMessage senden. Erst dann denkt die VCL, das du eine Taste gedrückt worden ist und löst dann das OnKeyPress Ereignis aus.


IngoD7 - Mo 21.02.05 11:22

Kokel hat folgendes geschrieben:
Ich wollte mal sehen ob ich das auch mit dem self befehl hinkriege.
Aber ich denke ich laß das mal besser.
Wäre für mich interessant gewesen das mal so zu versuchen.

Ich sehe den Zusammenhang zwischen deinem Problem und deiner Verwendung von self überhaupt nicht.


Kokel - Di 22.02.05 20:44

Mit self geht nu wirklich nicht.
Und ich werde diese theorie von dem so tun als ob ereigniss auch nicht weiter verfolgen. Ich habe hier in einem Beitrag gelesen das, dass nicht so gut ist. Und dieser Beitag hat mich überzeugt.
Danke für eure Antworten.


IngoD7 - Mi 23.02.05 01:13

Kokel hat folgendes geschrieben:
Und ich werde diese theorie von dem so tun als ob ereigniss auch nicht weiter verfolgen. Ich habe hier in einem Beitrag gelesen das, dass nicht so gut ist. Und dieser Beitag hat mich überzeugt.
Das ist ja auch korrekt und völlig in Ordnung.

Aber mit self hatte das Scheitern deines vorherigen Versuches nichts zu tun. Angenommen, du hättest das "so tun, als ob Ereignis" korrekt implementiert (ist zwar unsinnig, aber wäre ja durchaus machbar), so wäre für self einfach Form1 übergeben worden. Das hätte niemanden gestört.