AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi OnChange-Verarbeitung bei eigenem Edit-Objekt

OnChange-Verarbeitung bei eigenem Edit-Objekt

Ein Thema von jokeBB · begonnen am 20. Apr 2010 · letzter Beitrag vom 20. Apr 2010
 
jokeBB

Registriert seit: 7. Okt 2009
Ort: Böblingen
10 Beiträge
 
Delphi 2010 Professional
 
#1

OnChange-Verarbeitung bei eigenem Edit-Objekt

  Alt 20. Apr 2010, 17:35
Hallo,
folgendes Problem (OOP-Anfänger ): wie kann ich bei eigenen Edit-Objekten sowohl im Objekt als auch außerhalb (im Formular) auf OnChange reagieren?

Konkret: da ich in einem Formular viele Eingabefelder mit angrenzenden Textfeldern und besonderem Verhalten brauche, habe ich mir ein eigenes Objekt hierfür gemacht

Delphi-Quellcode:
type TInputBlock = class(TEdit)
  private
    FEdit: TEdit;
    ...
  protected
    procedure edtChange(Sender: TObject);
    ...
  public
    constructor Create(InputData: TInputData; InputDDName: TInputDDNames);
    procedure ShowBox(parent: TWinControl; col: integer);
    //procedure OnChange2(Sender: TObject);
    ...
end;

procedure TInputBlock.ShowBox(parent: TWinControl; col: integer);
begin
...
FEdit:=TEdit.Create(FPanel);
FEdit.Parent:=FPanel;
FEdit.Name := 'edt_'+IntToStr(col);
FEdit.SetBounds(120,2,60,20);
FEdit.Text := dd2s(FInputData[FInputDDName],-1);
FEdit.OnEnter := edtEnter;
FEdit.OnExit := edtExit;
FEdit.OnKeyPress := edtKeyPress;
FEdit.OnChange := edtChange;
...
end;


procedure TInputBlock.edtChange(Sender: TObject);
var dd: Double;
begin
if s2dd(FEdit.Text,dd) then
  begin
  // erfolgreiche Umwandlung in Double => Wert speichern
  FInputData[FInputDDName] := dd;
  FEdit.Color:= clYellow;
  ...
  end else begin
  // Umwandlung fehlgeschlagen
  FEdit.Color:= clRed;
  end;
end;

//procedure TInputBlock.OnChange2(Sender: TObject);
//begin
// edtChange(Sender);
//end;
Im FormCreate meines Formulars werden diese InputBoxen jetzt instantisiert und gezeichnet (kann man sicherlich auch zusammenfassen, aber egal):

Delphi-Quellcode:
inpX := TInputBlock.Create(myData,iTS);
inpX.ShowBox(scrInput, col);
...
Soweit klappt das gut: kann im Formular viele Felder erzeugen, die ihre Werte bei Eingabe automatisch prüfen und wegsichern bzw Fehleingaben verhindern und durch Farbe kennzeichnen, also jedes Feld für sich verarbeitet intern das OnChange über edtChange.

Allerdings müssen die Boxen untereinander Wechselwirkung haben, d.h. bei Eingabe/Auswahl bestimmter Werte z.B. in Box inpX (Comboboxen kommen noch) muss sich der Inhalt von Box inpY und inpZ entsprechend anpassen. Also sollte ich im Formular ebenfalls auf OnChange reagieren, aber natürlich das Basisverhalten der Box behalten/erben.

Ich dachte mir, ich könne im Formular eine eigene, zentrale Procedure machen, die ich dem OnChange jeder Box zuweise und die somit zuerst durchlaufen wird, und dann aber seinerseits die jeweilige Original-Routine aufruft (daher auch mal der Versuch mit OnChange2, um OnChange nicht zu überschreiben)


Delphi-Quellcode:
inpX.OnChange := InputChanged;
...

procedure TFormSingle.InputChanged(Sender: TObject);
begin
...
if Sender is TInputBlock then TInputBlock(Sender).OnChange(Sender);
...
end;
Aber leider wird immer noch die edtChange direkt durchlaufen, die InputChanged wird gar nicht erst aufgerufen.

Wo liegt der Denkfehler, kann mir da jemand vielleicht bitte einen Tipp geben?

Gruß, jokeBB
  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 14:35 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