Autor Beitrag
hui1991
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 433

Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
BeitragVerfasst: Do 10.05.07 17:56 
Hallo,

ich brauche hilfe bei meinem TCheckTreeView, das ich doch geschafft habe zu programmieren. Etz will ich es in einer Komponente packen. Blos die Komponente sollte bei OnChange, OnMouseDown eine Procedure ausführen. Blos ich weis leider nicht wie es geht. Die Anleitung auf dsdt.info (dsdt.info/tutorials/...pentwickeln/?page=6) klappt bei mir leider nicht. Jetzt suche ich Rat, wie macht man sowas? Ich will, wenn der Benutzer auf das TreeView klick, wird der Komponente in eine Procedure die X und Y werte gesendet und vllt noch den Sender (falls nötig). Blos ich kann darauf nicht zugreifen. Code habe ich keinen da, weil ja des nicht geht.

Ich bitte um Rat^^

MfG
hui1991
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 11.05.07 08:20 
Nicht funktionierender Code kann manchma sehr hilfreich sein ;-)

Im Allgemeinen hast Du aber bei den Basis-Komponenten eine Reihe von Protected-Attributen, und -Methoden, die Du für deine Arbeit überschreiben kannst. Siehe Hilfe ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
hui1991 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 433

Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
BeitragVerfasst: Fr 11.05.07 14:40 
Also ich habe im protected das hier stehen:
ausblenden Delphi-Quelltext
1:
procedure Change(Sender: TObject; Node: TTreeNode);					


und

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TCheckTreeView.Change(Sender: TObject; Node: TTreeNode);
begin
  Node.StateIndex:=1;
end;


Problem ist das das hier kommt:
[Error] Unit1.pas(14): Unsatisfied forward or external declaration: 'TForm1.CheckTreeView1Change'

Kann es sein, dort wo die Komponente drin ist, schon Change ausgeführt wird und deswegen der Fehler da ist?

---------
Habe Fehlermeldung behoben, habe es in Unit rein Getan und net in Kompounit und dann wars doppelt drin.
Naja aber so wie ich das etz sehe wird die Prozedure nicht ausgeführt.
Warum?
HelgeLange
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: Fr 11.05.07 15:23 
Wenn man eine Komponente baut, die sich von einer anderen ableitet, nimmt man NICHT die Ereignisse der Vorfahren-Komponente, um auf Situationen zu reagieren !

Du musst schauen, wo in TTreeView die Ereignisse gefuert werden und diese Methoden sind oftmals virtual, so dass du sie überschreiben kannst. Das Ereignis bleibt so dem Anwender vorbehalten und du kannst trotzdem Deinen Code ausführen

_________________
"Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
hui1991 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 433

Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
BeitragVerfasst: Fr 11.05.07 17:20 
Tja, da kann ich es wieder in den Sand stecken, wenn das wieder so kompliziert ist :(
Ich will doch nur darauf reagieren und nicht die Ursprungsdatei verändern.
ABer wenn das net geht, dann muss ich das wohl lassen :cry:
HelgeLange
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: Fr 11.05.07 18:02 
argl.. du änderst doch nicht die ursprungsdatei, sondern du leitest ab.

_________________
"Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
hui1991 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 433

Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
BeitragVerfasst: Fr 11.05.07 20:24 
Aber so wie ich das mache, funktioniert es leider nicht :(
ICh habe keinen Plan warum und wie das funktioniert.
Deswegen komme ich hier nicht weiter.
HelgeLange
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: Fr 11.05.07 21:00 
dann schau doch mal, wo in der Ursprungskomponente dein Event aufgerufen wird, überschreib diese function, setz ein inherited rein und mach deinen kram dazu.

_________________
"Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
hui1991 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 433

Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
BeitragVerfasst: Sa 12.05.07 18:49 
Das heißt ich kann diese Unit auch net veröffentlichen.
Ach mist...
Würde es in einer Komponente sein, mache ich mir nur einmal die Arbeit und es passt sich selber an.
Und so muss ich es immer rumkopieren. :(

MfG
hui1991
Calculon
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 676

Win XP Professional
Delphi 7 PE, Delphi 3 PRO
BeitragVerfasst: So 13.05.07 22:01 
Ich weiß' is OffTopic, aber so kann ich zwei Fliegen mit einer Klatsche schlagen,
zum einen SmileMaster 2005 ausprobieren und den Threadsteller etwas trösten

@hui1991: Nana, wer wird denn gleich..
user defined image
hui1991 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 433

Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
BeitragVerfasst: So 13.05.07 22:11 
Gibt es doch eine Lösung?
Weil ohne das kann ich auch net weiter machen.
Andere haben es doch auch geschafft, warum will mir keiner das veratten.
Ich will doch nur wissen wie man das macht.
Weil google mag mich nicht :(
Vllt. bin ich einfach nur zu blöd um etwas darüber in Google zu finden.
Hoffe das ich unter dem nächsten Stein die Lösung finde.
HelgeLange
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: So 13.05.07 22:48 
Such doch mal, wie man von vorhandenen Klassen Ableitungen machen kann (Vererbung) und dabei Methoden überschreiben... Das sollte doch nicht sooo schwer sein

_________________
"Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
hui1991 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 433

Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
BeitragVerfasst: Di 15.05.07 17:45 
Ich weis ja net was ich falsch mache, aber keine Ahnung ich finde es nicht so.
Und wenn ja verstehe ich es net, warum das net geht.
Ich habe wirklich keine Ahnung.
Soll ich das wirklich in den Sand stecken?
Wenn ich "Delphi Komponente vererben ereignisse überschreiben" ist nur ein Treffer gut und das ist diese Seite im Forum:
www.delphi-forum.de/viewtopic.php?p=440226

Der Rest ist irgendwie Müll, ich bin denke ich wirklich zu blöd oder die aufgabe ist zu schwer :cry:
HelgeLange
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: Di 15.05.07 20:56 
die Direktive zum überschreiben ist "override", damit kann man virtuelle methode von Komponenten überschreiben, um ihne zusätzliche Funktionen in einem abgeleiteten Object beizubringen (dazu innerhalb der Methode "inherited" aufrufen). Oder man kann auch eine neue komponente die Methode so überschreiben lassen, dass der Code der alten methode nicht mehr ausgeführt wird ("inherited" eben nicht aufrufen).

Und jetzt schau mal in der hilfe unter "inherited", "virtuell" und "override", da wirst Du bestimmt fündig

_________________
"Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
hui1991 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 433

Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
BeitragVerfasst: Di 15.05.07 21:24 
Ich bin wirklich zu blöd dazu :(
Ich habe das gemacht:

ausblenden Delphi-Quelltext
1:
procedure Change(Sender: TObject; Node: TTreeNode); override;					


und

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TCheckTreeView.Change(Sender: TObject; Node: TTreeNode);
begin
  Node.StateIndex:=1;
end;


und dann kam das

ausblenden Delphi-Quelltext
1:
[Error] CheckTreeView.pas(17): Declaration of 'Change' differs from previous declaration					


Ich denke das heißt, er will was überschreiben was es, aber davor noch nicht gab.
Hm.. ich kann das auch net genau sagen, da ich das Englisch nur grob verstehe.

Naja.. danke für den Ansatz, aber das hatte ich doch schon probiert, blos immer vergessen hier zu schrieben.
Ich schau mir mal die Hilfe genauer an und suche mal was auf Deutsch. ^^
HelgeLange
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: Di 15.05.07 21:56 
die Methode Change hat bestimmt keinen "Sender: TObject" ;)
Du musst beim TreeView selbst schauen, wie das definiert ist

_________________
"Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
hui1991 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 433

Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
BeitragVerfasst: Mi 16.05.07 17:49 
Danke,

habe das weg getan und man kann es ausführen, problem ist das Change nicht ausgeführt wird, wenn eine Zeile sich ändert oder hinzugefügt wird sondern, wenn man des anklickt. Naja ich habe das dann weg getan und das bei der Eingabe Procedure auf 1 gesetzt. Naja und dann habe ich MouseMove verwendet für die Änderugen ^^
Dies habe ich im Normalen Projekt auch schon mal gemacht.
Beim Normalen Projekt geht es
Bei dem mit der Kompon net :(
Naja muss ich halt schauen warum ^^