![]() |
Welche Komponente führt die Metode aus?
Nehmen wir an ich habe 10 Komponenten des Typs TButton.
Alles dieser Komponenten haben die selbe OnClick Methode: ButtonClick Das heißt egal auf welchen Button gedrückt wird, es geschiet das gleiche. Nun möchte ich in der Metode des Button klicks abfragen welcher Button denn diese Metode ausgeführt hat und dies dann anzeigen. |
Re: Welcher Komponente führt die Metode aus?
Die OnClick-Methode bietet Dir einen Parameter namens "Sender", dort kann Du überprüfen, auf welchen Button geklickt wurde.
|
Re: Welche Komponente führt die Metode aus?
Schau dir mal den Parameter Sender an.
|
Re: Welche Komponente führt die Metode aus?
Ja habe ich bereits, aber ich werde daraus nicht schlau. Entschuldigung
|
Re: Welche Komponente führt die Metode aus?
Wo hapert es denn?
Du kannst per
Delphi-Quellcode:
an den Namen des Buttons dran kommen.
(Sender as TButton).Name
|
Re: Welche Komponente führt die Metode aus?
Geht das denn auch mit Arrays? Ich habe ein Array von TJvThreads, jedoch wenn ich mit ShowMessage und dann dem Code von eben arbeiten möchte funktioniert das nicht. Ungültige Typenumwandlung
|
Re: Welche Komponente führt die Metode aus?
Zeig mal den Code
|
Re: Welche Komponente führt die Metode aus?
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var LI: TListItem; begin Inc(Index, 1); SetLength(Views, Index+1); SetLength(Threads, Index+1); { Neue ListView erstellen } Views[Index] := TJvListView.Create( self); Views[Index].Parent := panel1; Threads[Index] := TJvThread.Create(Form2); Threads[Index].OnExecute := ThreadsExecute; Threads[Index].Tag := Index; { Eigenschaften der neuen Listview zuweisen } with Views[Index] do begin Columns := JvListView1.Columns; ViewStyle := vsReport; Width := JvListView1.Width; Height := JvListView1.Height; Top := JvListView1.Top; Left := JvListView1.Left; end; Threads[Index].ThreadDialog := nil; Threads[Index].Execute(self); Tabs.AddTab(Edit1.Text); Tabs.SelectedTab := Tabs.Tabs.Items[Index]; end; procedure TForm2.ThreadsExecute(Sender: TObject; Params: Pointer); var I: Integer; begin ShowMessage((Sender as TJvThread).Name); end; |
Re: Welche Komponente führt die Metode aus?
Lass dir mal Anzeigem von Welchem Typ Sender ist.
|
Re: Welche Komponente führt die Metode aus?
Und wie :D
|
Re: Welche Komponente führt die Metode aus?
Sender.Classname
|
Re: Welche Komponente führt die Metode aus?
Delphi-Quellcode:
Das 2. kannst du natürlich nur benutzen, wenn die Sender ausschließlich TJvThreads sind.
procedure TForm2.ThreadsExecute(Sender: TObject; Params: Pointer);
begin if Sender is TJvThread then ShowMessage((Sender as TJvThread).Name); end; //Oder Sender als TJvThread definieren procedure TForm2.ThreadsExecute(Sender: TJvThread; Params: Pointer); begin ShowMessage(Sender.Name); end; Mfg |
Re: Welche Komponente führt die Metode aus?
Ja sind sie aber funkt einfach nicht
|
Re: Welche Komponente führt die Metode aus?
Die Methodenparameter dürften wohl vorgegeben sein, also nimm besser die erste Variante.
|
Re: Welche Komponente führt die Metode aus?
Delphi-Quellcode:
Selbst das geht nicht
procedure TForm2.JvThread1Execute(Sender: TObject; Params: Pointer);
begin if Sender is TJvThread then ShowMessage((Sender as TJvThread).Name); end; procedure TForm2.Button2Click(Sender: TObject); begin JvThread1.ThreadDialog := nil; JvThread1.Execute(self); end; |
Re: Welche Komponente führt die Metode aus?
Und welche Klasse gehört Sender nun an?
|
Re: Welche Komponente führt die Metode aus?
Ich habe keine Ahnung. Es muss ja eigentlich TJvThread sein. Also ich klicke auf einen Button, danach wird JvThread1.Execute;
Und das wars ... |
Re: Welche Komponente führt die Metode aus?
Dann lass es dir doch anzeigen :zwinker:
|
Re: Welche Komponente führt die Metode aus?
Zuerst musste mir verraten wie ;)
SHowMessage( Sender.ClassType.ClassName ); so habe ichs gemacht = Leere MSG Box // So jetzt habe ichs TJvBaseThread aber dann geht das nicht: ShowMessage(( Sender as TJvBaseThread ).Name ); |
Re: Welche Komponente führt die Metode aus?
Delphi-Quellcode:
Ich nehme an das TJvThread von TJvBaseThread abstammt, dann dürfte es eigentlich keine Typenunverträglichkeit geben
ShowMessage( Sender.ClassName );
Kennt die Klasse, die gewünschten Eigenschaften? |
Re: Welche Komponente führt die Metode aus?
Hatte es schon :D
Name kennt es nicht //EDIT hätte nicht gedacht das das soo kompliziert wird |
Re: Welche Komponente führt die Metode aus?
*mini push* :D
|
Re: Welche Komponente führt die Metode aus?
Meinst du .Name? Und welche klasse?
|
Re: Welche Komponente führt die Metode aus?
bei TJvBaseThread gibts kein name
|
Re: Welche Komponente führt die Metode aus?
Wie sieht das Vererbungsschema aus?
|
Re: Welche Komponente führt die Metode aus?
was meinst du damit?
|
Re: Welche Komponente führt die Metode aus?
Von welcher Klasse stammt diese Klasse ab?
|
Re: Welche Komponente führt die Metode aus?
Bei einem Button wäre es z.B.
Delphi-Quellcode:
-> bedeutet: Erbt von
TButton -> TButtonControl -> TWinControl -> TControl -> TComponent -> TPersistent -> TObject
|
Re: Welche Komponente führt die Metode aus?
Ja hier stammt TJvThread stammt von TJvBaseThread
|
Re: Welche Komponente führt die Metode aus?
Das problem besteht nach wie vor :D
|
Re: Welche Komponente führt die Metode aus?
Kennt TJvBaseThread .Name nicht (ist also erst in TJvThread definiert), oder ist .Name in TJvBaseThread nur nicht sichtbar (in TJvBaseThread nicht als public/published definiert)?
Wenn es zwar definiert, aber nicht sichtbar ist, dann belaß es doch bei (Sender as TJvThread).Name oder TJvThread(Sender).Name . |
Re: Welche Komponente führt die Metode aus?
ich weis es nicht, jedoch kann ich nicht TJvBaseTHread.Name schreieben ohne eine Fehlermeldung zu bekommen
|
Re: Welche Komponente führt die Metode aus?
Man kann auch mit einem Fahrrad nicht Fliegen.
Delphi-Quellcode:
(Sender as TJvThread).Name
|
Re: Welche Komponente führt die Metode aus?
Das geht doch nicht, das haben wir doch schon durchgekaut
TJvThread > TJvBaseThread > TThread > TObject |
Re: Welche Komponente führt die Metode aus?
wie/wo ist den nun .Name definiert?
( in TThread existiert es noch nicht und die Jedis hab ich hier nicht installiert. :oops: ) |
Re: Welche Komponente führt die Metode aus?
Zitat:
Delphi-Quellcode:
TJvThread( Sender).Name;
|
Re: Welche Komponente führt die Metode aus?
Zitat:
|
Re: Welche Komponente führt die Metode aus?
Diese Komponenten liegen auch nicht in der selben Veerbungshierarchie:
Delphi-Quellcode:
TJvThread = class(TJvComponent)
|
Re: Welche Komponente führt die Metode aus?
OK habe es anders, mit einer Komponente aber merheren Threads gelöst, aber mich würde es trotzdem interessieren wieso es nciht geht
|
Re: Welche Komponente führt die Metode aus?
Weil wie man sieht, ein TJvThread kein TJvBaseThread ist.
Es sieht eher aus, als ob ein Thread mehrer BaseThreads in einer Threadliste beinhalten kann. Wäre FSender nicht privat, könnte man so vielleicht auf den Thread schließen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:34 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