AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

OnChangeValue ?

Ein Thema von akurka · begonnen am 13. Jan 2016 · letzter Beitrag vom 18. Jan 2016
Antwort Antwort
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#1

AW: OnChangeValue ?

  Alt 14. Jan 2016, 13:29
Delphi-Quellcode:
//interface-Teil

TMeineKlasse = class
  private
    fBWStellung: Integer;
    procedure setBWStellung(value: Integer);
    function getBWStellung:Integer;
  public
    OnValueChange :TNotifyEvent;
    Property BWStellung :Integer read getBWStellung write SetBWStellung;
  end;

//implementation-Teil

procedure TMeineKlasse.setBWStellung(value: Integer);
begin
  if (fBWStellung = value) then Exit;
  fBWStellung := value;
  if Assigned(OnValueChange) then
    OnValueChange(Self);
end;

function TMeineKlasse.getBWStellung:Integer;
begin
  Result:=fBWStellung;
end;
Hattes du überhaupt den Getter implementiert?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.375 Beiträge
 
Delphi 12 Athens
 
#2

AW: OnChangeValue ?

  Alt 14. Jan 2016, 13:40
Getter ist ja nicht wirklich nötig, außer man will den Zugriff threadsicher machen, oder man muß mehr machen, als nur ein Feld auszulesen.
Delphi-Quellcode:
type
  TMeineKlasse = class//(TComponent)
  private
    FBWStellung: Integer;
    FOnValueChange :TNotifyEvent;
    procedure SetBWStellung(Value: Integer);
  public//published? (vorallem für OnValueChange, wenn man TMeineKlasse im Designer AUF die Form legt)
    Property BWStellung: Integer read FBWStellung write SetBWStellung;
    property OnValueChange: TNotifyEvent read FOnValueChange write FOnValueChange;
  end;

procedure TMeineKlasse.SetBWStellung(Value: Integer);
begin
  if FBWStellung = Value then
   Exit;
  FBWStellung := Value;
  if Assigned(FOnValueChange) then
    FOnValueChange(Self);
end;

Im Thread kannst du nun per TThread.Synchronize oder TThread.Queue dem Property was zuweisen.
Der Thread wertet also die Records aus und setzt die entsprechenden Property und die Klasse kümmert sich um die Notifications.
(mit Queue, wenn der Thread nicht hängen soll, so lange der Hauptthread arbeitet, aber mit Generice/anonymen Methroden geht sowas einfacher)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von akurka
akurka

Registriert seit: 30. Dez 2008
Ort: Schweiz, 8636 Wald ZH
81 Beiträge
 
Delphi 7 Personal
 
#3

AW: OnChangeValue ?

  Alt 14. Jan 2016, 16:05
Hallo
jetzt läuft es durch den Compiler auch durch. Es ist jetzt auch klar warum es immer ein Fehler bei der Compilation gab.

Property BWStellung :Integer read getBWStellung write SetBWStellung; Wenn es in der Zeile das " read getBWstellung" gibt, ist natürlich auch die Funktion
"getBWStellung" notwendig. Ersetzt man dagegen das
read getBWStellung durch read fBWStellung kann man die getFunktion weglassen.

Es ist zwahr jetzt beim Compiler auch durch, aber es gibt leider kein Event beim änderung der BWStellung.

Delphi-Quellcode:
procedure TForm2.OnValueChange;
begin
  StatusBild;
end;
Die Procedur StatusBild wurde gar nicht aufgerufen bei
BWStellung Aenderung.Das konnte ich eindeutig mit dem Debugger feststellen.

Nun eine Frage:
Ich habe versucht nebenbei eine eigene Komponente zu
schreiben. Nun in den Tutorials wird für ein Event Auslösung z.Bsp. ein OnKeyPress genommen und entsprechend geändert.Was ich für mein Problem nicht brauchen kann.
In allen Tutorials die ich gefunden habe,
wurden immer als Beispiel Event von Tasten genommen.
Ist es darum, dass es keine andere WindowsMessage gibt?
Weiss jemand, wie man in eine eigene Komponente ein
Event auslöst für eine Wertänderung ? Oder ist es gar nicht möglich ?

Gruss Anton
Anton Kurka
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.074 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: OnChangeValue ?

  Alt 14. Jan 2016, 16:36
Es ist zwahr jetzt beim Compiler auch durch, aber es gibt leider kein Event beim änderung der BWStellung.

Delphi-Quellcode:
procedure TForm2.OnValueChange;
begin
  StatusBild;
end;
Die Procedur StatusBild wurde gar nicht aufgerufen bei
BWStellung Aenderung.Das konnte ich eindeutig mit dem Debugger feststellen.

Nun eine Frage:
Ich habe versucht nebenbei eine eigene Komponente zu
schreiben. Nun in den Tutorials wird für ein Event Auslösung z.Bsp. ein OnKeyPress genommen und entsprechend geändert.Was ich für mein Problem nicht brauchen kann.
Zeige doch bitte mal die Stelle in deinen Quelltext, wo du das schreibst:
Delphi-Quellcode:
DeinVariablenName := TMeineKlasse.Create;
DeinVariablenName.OnValueChange := Form2.OnValueChange
  Mit Zitat antworten Zitat
Benutzerbild von akurka
akurka

Registriert seit: 30. Dez 2008
Ort: Schweiz, 8636 Wald ZH
81 Beiträge
 
Delphi 7 Personal
 
#5

AW: OnChangeValue ?

  Alt 14. Jan 2016, 16:59
Hallo TiGü
Entschuldige, aber mir ist nicht ganz klar welche Stelle in meinem Programm sehen willst ?
Soll ich Dir die ganze Unit senden ?
Gruss Anton
Anton Kurka
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#6

AW: OnChangeValue ?

  Alt 14. Jan 2016, 19:24
Das schreibt TiGü doch "laut" und deutlich: Er möchte sehen, wo du eine Instanz deiner neuen Klasse erzeugst. Wenn du eine solche Stelle nicht finden kannst, dann erzeugst du keine Instanz deiner Klasse und kannst auch nicht mit dieser Klasse arbeiten.

Ich würde dir wirklich dringendst emfpehlen, mal das eine oder andere Class-Turorial durchzuarbeiten, denn offenbar verstehst du von dem, was man dir ständig an wertvollen Tips gibt, nicht mal die Hälfte. Diesen Umstand kannst nur du selbst ändern.
  Mit Zitat antworten Zitat
Benutzerbild von akurka
akurka

Registriert seit: 30. Dez 2008
Ort: Schweiz, 8636 Wald ZH
81 Beiträge
 
Delphi 7 Personal
 
#7

AW: OnChangeValue ?

  Alt 14. Jan 2016, 22:43
Hallo Perlsau

So habe ich die neue Klasse Instanziert, gemäss dem Tutorial :

Delphi-Quellcode:
//====================================================
procedure TForm2.MenueCreate(Sender: TObject);
begin
  keypreview:=true;
  ActiveImage :=Image1;
  Form2.ClientWidth:=512;
  Form2.ClientHeight:=256;
  Form2.Image1.Width:=511;
  Form2.Image1.Height:=255;
  F_obereAchsen:=false;
  F_KeyA := false;
  MeineKlasse :=TMeineKlasse.Create;
  //MeineKlasse.fBWStellung.OnvalueChange := Form2.OnValueChange;
  //MeineKlasse.fBWStellung.OnvalueChange := OnValueChange;
  //MeineKlasse.OnvalueChange := OnValueChange;
  //MeineKlasse.OnvalueChange := Form2.OnValueChange;
  //fBWStellung := Form2.OnValueChange;
  //fBWStellung := OnValueChange;
  // das frisst der Compiler nicht..
end;
Genügt das nicht ?
Ich meinte wenn die neue Klasse instanziert ist, sind auch die drin deklarierte Proceduren bekannt, oder nicht ?
Muss man die OnValueChange noch zusätzlich deklarieren ? das habe ich probiert, aber das schluckt der Compiler nicht.
Ich habe den verdammten Tutorial von vorne und zurück
heute nachmittag sicher 5 mal durchgelesen aber die Verwirrung
wird nur noch grösser.
Gruss Anton
Anton Kurka
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 15:50 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-2025 by Thomas Breitkreuz