AGB  ·  Datenschutz  ·  Impressum  







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

Sender:Tobject - Sender is Benutzer

Ein Thema von Noobinator · begonnen am 8. Mär 2008 · letzter Beitrag vom 9. Mär 2008
Antwort Antwort
Noobinator

Registriert seit: 9. Mai 2006
147 Beiträge
 
Delphi 7 Personal
 
#1

Sender:Tobject - Sender is Benutzer

  Alt 8. Mär 2008, 20:54
Hallo

Ich sitze gerade vor einem kleinen Problemchen und google konnte mir nicht helfen.

Situation:

ich habe eine Trackbar, welche
1. vom Programm geändert wird
2. von mir geändert wird.

Nun sollen aber bei im Onchange ereigniss der Trackbar je nachdem wer was andert unterschiedliche Dinge passieren.

Das muss ja irgendwie über den Sender zu realisieren gehen, nur wie?

ich habe mal debugt und immer steht da:
sender = ();

wie kann ich das realisieren?

das Programm ändert wie folgt:

trackbar1.position := x; und ich ändere ja durch klicken
Nun gibt es aber kein Onmousedown und Onmouseup indem ich nen Bool umlegen könnte ob ich Klicke oder nicht.

Hoffe ihr versteht mein Problem und könnt mir helfen.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#2

Re: Sender:Tobject - Sender is Benutzer

  Alt 8. Mär 2008, 21:00
Zitat von Noobinator:
Nun gibt es aber kein Onmousedown und Onmouseup indem ich nen Bool umlegen könnte ob ich Klicke oder nicht.
Dann mach es doch andersrum:
Delphi-Quellcode:
var tudochwasanderes: boolean;
//...
tudochwasanderes := true;
trackbar1.position := x;
tudochwasanderes := false;
Ist vielleicht nicht die beste Lösung, aber es sollte funktionieren.

EDIT: Apropros, der Sender ist in beiden Fällen die Komponente, also im Beispiel "trackbar1".

MfG,
Bug
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#3

Re: Sender:Tobject - Sender is Benutzer

  Alt 8. Mär 2008, 21:03
Der Sender ist immer das Control, welches das Event auslöst. Das heisst wenn etwas Deine Trackbar ändert, ist der Auslöser (und damit der Sender) eigentlich immer die Trackbar selber.

Ich denke das von BUG wäre ein Straightforward Ansatz, den man in Erwägung ziehen sollte.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Sender:Tobject - Sender is Benutzer

  Alt 8. Mär 2008, 21:10
Das OnChange Event wird ausgelöst, wenn sich die Position ändert. Dies passiert unabhängig ob das manuell vom Benutzer gemacht wird, oder via Code durch Setzen der Position Eigenschaft. Der Sender im OnChange Event hat aber nix damit zu tun, sondern gibt ledilich das Objekt zurück, das das Ereignis ausgelöst hat. Und das ist in beiden Fällen die Trackbar Instanz, die geändert wurde. Damit wird lediglich ermöglicht, den gleichen Eventhandler für unterschiedliche Trackbars zu nutzen, sprich, den Code nicht doppelt zu schreiben, wenn analoges passieren soll.

Die OnMouseDown/Up Events kannst du getrost vergessen, da die Position auch über die Tastatur geändert werden kann, wenn das Control den Fokus hat.

Genau dein Problem finde ich ist eins von den Dingen, die in allen IDE Umgebungen ziemlich schlecht gelöst sind. Es bleibt in der Tat nur der Weg, über eine Zwischenvariable zu testen, ob die Position über Code oder vom Benutzer verändert wurde. Anders als BUG würde ich das aber nicht über eine globale oder Formvariable lösen, sondern über eine Eigenschaft der Trackbar selbst. Da bietet sich allerdings nur die Property Tag an. Das hat den Vorteil, dass der Trick auch bei mehreren Trackbar Instanzen funktioniert.
  Mit Zitat antworten Zitat
Noobinator

Registriert seit: 9. Mai 2006
147 Beiträge
 
Delphi 7 Personal
 
#5

Re: Sender:Tobject - Sender is Benutzer

  Alt 8. Mär 2008, 21:20
ersmtal Danke euch allen =)

Funktioniert

habe es mit der Variable gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von Cyberbob
Cyberbob

Registriert seit: 24. Jan 2005
Ort: Karben
626 Beiträge
 
Delphi XE7 Architect
 
#6

Re: Sender:Tobject - Sender is Benutzer

  Alt 9. Mär 2008, 03:59
du könntest allerdings auch alle Programminternen veränderungen der Trackbar über eine Eigene Procedure laufen lassen und dort entsprechen reagieren.
Wobei das mit dem Setzen von Tag schon eine recht gute Lösung ist!
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Sender:Tobject - Sender is Benutzer

  Alt 9. Mär 2008, 06:41
Hai Noobinator,

ich würde mir für das setzen der Position eine Procedure schreiben und in dieser dann das OnChange-Event kurzzeitig deaktivieren.

Zum Beispiel so:
Delphi-Quellcode:
procedure SetTrackBarPosition(const aTB: TTrackBar; const aValue: Integer);
var
  oldTBChange: TNotifyEvent;
begin
  with aTB do
  begin
    oldTBChange := OnChange; // Original OnChange merken
    OnChange := NIL; // OnChange deaktivieren
    Position := aValue; // Wert setzen
    OnChange := oldTBChange; // Original OnChange wieder zuweisen
  end;
end;

procedure TDemo_Form.Button1Click(Sender: TObject);
begin
  SetTrackBarPosition(TrackBar1, 5);
end;

procedure TDemo_Form.TrackBar1Change(Sender: TObject);
begin
  Label1.Caption := IntToStr((Sender as TTrackBar).Position);
end;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Cyberbob
Cyberbob

Registriert seit: 24. Jan 2005
Ort: Karben
626 Beiträge
 
Delphi XE7 Architect
 
#8

Re: Sender:Tobject - Sender is Benutzer

  Alt 9. Mär 2008, 15:36
genau so habe ich das gemeint
Christian
  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 12:41 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