Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Delphi 5 - Eigene Edit-Komponente mit meiner Prozedur (https://www.delphipraxis.net/124873-delphi-5-eigene-edit-komponente-mit-meiner-prozedur.html)

DeMoehn 26. Nov 2008 18:30


Delphi 5 - Eigene Edit-Komponente mit meiner Prozedur
 
Guten Abend liebe User.

Ich habe ein kleines Schulprojekt vor mir und möchte nun eine eigene Edit-Komponente erstellen.
Dazu hatte ich bereits eine Funktion gefertigt welche bei Verlassen der Edit-Box die Zahelen von 1-9 eine 0 vorordnet und Zahlen größer 15 erkennt.

Dies sah so aus:
Delphi-Quellcode:
 
procedure _SetupEdit(aEdit : TEdit);
Begin
  aEdit.onExit := AnyEditExit;
End;
--> Als Prozedur welche in eier Schleife so angewandt wurde

Delphi-Quellcode:
_SetupEdit (TEdit(FindComponent('Edit'+IntToStr(i))));
Die Prozedur AnyEditExit sieht so aus:

Delphi-Quellcode:
procedure TForm1.AnyEditExit(Sender: TObject); // Prozedur für die Editfelder
var
  field: TEdit;
  eingabe: integer;
begin
  field := Sender as TEdit;
  if(field.Text <> '') then begin
    if(TryStrToInt(field.Text)) then begin
      eingabe := StrToInt(field.Text);
      if(eingabe > 15) then begin
        ShowMessage('Zahl zu groß');
        field.Text := IntToStr(15);
      end;
      if((StrToInt(field.Text[1]) = 0) and (field.Text[2] = '')) then
        field.Text := '0'+field.Text
      else if(((eingabe < 10) and (eingabe <> 0)) and (Length(field.Text) < 2)) then
        field.Text := '0'+field.Text;
    end
    else
      ShowMessage('kein gültiger Integerwert');
  end;
end;
Nun möchte ich das ganze in eine Komponente packen die das ganze regelt aber ich hab keine wirklich Ahnung wie das möglich ist.

Ich möchte keine direkten Lösungsvorschläge.
Tipps, Hinweise und Links wären mir auch schon sehr recht.

EDIT: Kann man diesem Edit-Feld auch einfach noch einen Boolean-Wert mitgeben?
z.B. Edit32.note und da steht dann true oder false?

Mit freundlichen Grüßen

nahpets 27. Nov 2008 09:56

Re: Delphi 5 - Eigene Edit-Komponente mit meiner Prozedur
 
Hallo,
Zitat:

Zitat von Sebastian
Ich möchte keine direkten Lösungsvorschläge.

Deshalb mal "grob" :wink:

Mach' Dir 'ne neue Komponente mit dem Vorfahren TEdit (Menü Komponenten, Neue Komponente...).
Im Quelltext fügst Du Deine Ereignisroutine ein, im Create der neuen Komponenten weist Du dem OnExit-Ereignis Deine Ereignisroutine zu. Und wenn Du schon dabei bist, eine eigene Ereignisroutine zuzufügen, wird es Dir leicht fallen, auch noch ein zusätzliches boolsches Attribut hinzuzufügen.

Wenn Du nicht klar kommst, suche Dir den Quelltext von irgendeiner Komponente und schau, wie es da gemacht wird. Eventuell wirst Du dazu ja schon in den Sourcen von Delphi fündig.
Mein Vorschlag, füge erst das Attribut "Note" hinzu, dass dürfte zum Lernen einfacher sein.

DeMoehn 27. Nov 2008 16:43

Re: Delphi 5 - Eigene Edit-Komponente mit meiner Prozedur
 
Guten Tag.

Ich bin jetzt soweit:

Delphi-Quellcode:
unit MarkEdit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

procedure Register;

type
  TMarkEdit1 = class(TEdit)
  private
    { Private-Deklarationen }
    Fnote: boolean;
    eingabe: string;
    function TryStrToInt(string_in:string):boolean;
  protected
    { Protected-Deklarationen }
   
  published
    { Published-Deklarationen }
    property Note:boolean read Fnote write Fnote;
  public
    { Public-Deklarationen }
    procedure onExit; override; // Hier ist die onExit Proz.
  end;

implementation

procedure Register;
begin
  RegisterComponents('Win32', [TMarkEdit1]);
end;

// Funktion zum Prüfen ob Eingabe ein String
function TMarkEdit1.TryStrToInt(string_in:string):boolean;
begin
  Try
    StrToInt(string_in);
    Result := true;
  except on EConvertError do
    Result := false;
  end;
end;

procedure TMarkEdit1.onExit; // Hier soll sie verändert werden
begin
  if(AText.Text <> '') then begin
    if(TryStrToInt(AText.Text)) then begin
      eingabe := StrToInt(AText.Text);
      if(eingabe > 15) then begin
        ShowMessage('Zahl zu groß');
        AText.Text := IntToStr(15);
      end;
      if((StrToInt(AText.Text[1]) = 0) and (AText.Text[2] = '')) then
        AText.Text := '0'+AText.Text
      else if(((eingabe < 10) and (eingabe <> 0)) and (Length(AText.Text) < 2)) then
        AText.Text := '0'+AText.Text;
    end
    else
      ShowMessage('kein gültiger Integerwert');

    inherited OnExit;
end;

end.
Jedoch weiß ich nicht wie es weiter geht denn der Compiler meldet immer "Methode 'onExit' nicht in Basisklasse gefunden" ich habe ein wunderbares Tutorial gefunden unter http://www.delphi-treff.de/tutorials...icklen/page/1/ jedoch hilft es mir nicht mehr weiter.

Um Hilfe wäre ich sehr dankbar

quendolineDD 27. Nov 2008 16:48

Re: Delphi 5 - Eigene Edit-Komponente mit meiner Prozedur
 
Der Compilrausdruck sagt dir eigentlich schon direkt was los ist.
Deine MaskEdit ist abgeleitet von TEdit und willst die Funktion onExit überschreiben, jedoch gibt es die Funktion in der Basisklasse (= TEdit) nicht

DeMoehn 27. Nov 2008 16:51

Re: Delphi 5 - Eigene Edit-Komponente mit meiner Prozedur
 
Aber ein TEdit besitzt doch die onExit-Funktion???

DeddyH 27. Nov 2008 16:53

Re: Delphi 5 - Eigene Edit-Komponente mit meiner Prozedur
 
Nein, es besitzt die OnExit-Property (ein Methodenzeiger).

DeMoehn 27. Nov 2008 17:10

Re: Delphi 5 - Eigene Edit-Komponente mit meiner Prozedur
 
Naja ist ja auch ganz egal (im Moment) was es besitzt.

Ich müsste diese Komponent schnellstmöglich fertig bekommen,
Es wäre sehr nett wenn mir jemand sagen könnte wie man dieses Problem - das ich im Moment habe - lösen kann.

Ich bin nicht auf Komplettlösungen fixiert. Es wäre schon schön wenn mir jemand sagt ob und besten Falls wo sowas beschrieben steht oder mir einen vernünftigen Tipp gibt.

Mfg

DeddyH 27. Nov 2008 17:46

Re: Delphi 5 - Eigene Edit-Komponente mit meiner Prozedur
 
TWinControl besitzt die dynamische Methode DoExit. Die kannst Du überschreiben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz