Autor |
Beitrag |
hui1991
      
Beiträge: 433
Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
|
Verfasst: 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
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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 
      
Beiträge: 433
Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
|
Verfasst: Fr 11.05.07 14:40
Also ich habe im protected das hier stehen:
Delphi-Quelltext 1:
| procedure Change(Sender: TObject; Node: TTreeNode); |
und
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
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: 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 
      
Beiträge: 433
Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
|
Verfasst: 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 
|
|
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: 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 
      
Beiträge: 433
Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
|
Verfasst: 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
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: 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 
      
Beiträge: 433
Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
|
Verfasst: 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
      
Beiträge: 676
Win XP Professional
Delphi 7 PE, Delphi 3 PRO
|
Verfasst: 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..

|
|
hui1991 
      
Beiträge: 433
Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
|
Verfasst: 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
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: 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 
      
Beiträge: 433
Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
|
Verfasst: 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 
|
|
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: 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 
      
Beiträge: 433
Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
|
Verfasst: Di 15.05.07 21:24
Ich bin wirklich zu blöd dazu
Ich habe das gemacht:
Delphi-Quelltext 1:
| procedure Change(Sender: TObject; Node: TTreeNode); override; |
und
Delphi-Quelltext 1: 2: 3: 4:
| procedure TCheckTreeView.Change(Sender: TObject; Node: TTreeNode); begin Node.StateIndex:=1; end; |
und dann kam das
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
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: 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 
      
Beiträge: 433
Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
|
Verfasst: 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 ^^
|
|