![]() |
Komponente in Komponente D2006
Kleines Problem..
Versuche eine Komponente im DSPAck einzubinden welche aber schon als Komponente registriert ist. Bei D7 scheint es zu funktionieren warum bei D2006 nicht ? Die änderung !
Delphi-Quellcode:
TXiTrackBar ist eine Komponente welche sich in der XiControls Komponente befindet.
{ This control implement a seek bar for a media-player application.
The seek bar is implemented as a TTrackbar control. } // Original TXiTrackBar = TTrackBar TDSTrackBar = class(TXiTrackBar, IEvent) private FFilterGraph: TFilterGraph; FMediaSeeking: IMediaSeeking; FWindowHandle: HWND; FInterval: Cardinal; FOnTimer: TTimerEvent; FEnabled: Boolean; FMouseDown: boolean; procedure UpdateTimer; procedure SetTimerEnabled(Value: Boolean); procedure SetInterval(Value: Cardinal); procedure SetOnTimer(Value: TTimerEvent); procedure SetFilterGraph(AFilterGraph: TFilterGraph); procedure GraphEvent(Event, Param1, Param2: integer); procedure ControlEvent(Event: TControlEvent; Param: integer = 0); procedure TimerWndProc(var Msg: TMessage); property TimerEnabled: Boolean read FEnabled write SetTimerEnabled; protected Ohne uses läßt sich DSPack nicht mehr installieren weil die zuweisung TXiTrackBar nicht gefunden wird. Pfade und Verweise zu XiControls wurden aber gesetzt. Binde ich jetzt in uses XiTrackBar mit ein wird die Package CDpack ordnungsgemäß compiliert und installiert. Starte ich nun die Anwendung kommt die Fehlermeldung XiTrackBar wurde schon registriert und befindet sich in blaa, blaa.. Wie kann ich das Problem umgehen? |
Re: Komponente in Komponente D2006
Wie ist denn deine Register procedure? Da liegt vermutlich das Problem, dass du TXiTrackBar nochmal registrierst, statt TDsTrackBar ...
Florian |
Re: Komponente in Komponente D2006
Zitat:
Gibts da irgendeine einstellung ? TXiTrackBar wird ja nur neu registriert( was nicht geht )wenn es als uses im DSPack eingebunden ist. gruß |
Re: Komponente in Komponente D2006
Also wenn ich das richtig verstanden habe, willst du eine neue von TXiTrackBar abgeleitete Komponente registrieren. Diese deklarierst du als TDSTrackBar.
Wenn du Delphi sagst, dass du eine neue Komponente erstellen willst, bietet Delphi dir ja die Möglichkeit das Grundgerüst für die Komponenten Unit schon zu generieren, also die Unit mit
Delphi-Quellcode:
Desweiteren ist in dieser Unit eine funktion Register nötig, um die neue Komponente in der Komponentenpalette anzumelden.
type TDSTrackBar = class(...
Delphi-Quellcode:
Ich vermute mal, dass du
procedure Register;
implementation procedure Register; begin RegisterComponents('Standard', [TDSTrackBar]); end;
Delphi-Quellcode:
anstelle von
RegisterComponents('Standard', [TXiTrackBar])
Delphi-Quellcode:
verwendet hast. Das führt dann natürlich dazu, dass Delphi meckert, da ja schon ein Komponententyp mit der Bezeichnung TXiTrackBar registriert wurde.
RegisterComponents('Standard', [TDSTrackBar])
Ich hoffe, das wird dir helfen. Florian |
Re: Komponente in Komponente D2006
Zitat:
Ich habe lediglich die Class verändert TDSTrackBar = class(TXiTrackBar ... Da war er schon am mucken weil ihm TXiTrackBar unbekannt war. RegisterComponents habe ich im Originalzustand belassen. Könnte es sein das ich TXiTrackbar aus der komponente XI entfernen muss ? Gruß |
Re: Komponente in Komponente D2006
Achso ... du hast die Komponente registriert und danach die Klasse im Nachhinein verändert. In diesem Falle sollte es reichen, wenn du nur die Komponenten Unit neu compilierst.
Das Package musst du glaube ich nicht neu installieren. Wenn doch, dann musst du das Package nochmal deinstallieren und nach der Änderung der Unit neu installieren. Florian |
Re: Komponente in Komponente D2006
Zitat:
Oder ich drücke mich schlecht aus. Es ist wie folgt. Es gibt eine Package XiControls In dieser sind 4 Units enthalten. XiButton.pas, XiPanel.pas, XiProgressBar.pas, XiTrackBar.pas. Die Registrations Unit ist XiControls.pas In der steht!
Delphi-Quellcode:
dann gibt es die Package DSPack
unit XiControls;
interface uses Classes, XiButton, XiProgressBar, XiPanel, XiTrackBar; implementation {$R XiControls.res} procedure Register; begin RegisterComponents('XiControls', [TXiPanel, TXiTrackBar, TXiProgressBar, TXiButton]); end; end. Hier ist eigentlich nur die DSPack.pas interessant diese wurde geändert und zwar wie schon erwähnt TDSTrackBar = class(TTrackBar ... in TDSTrackBar = class(TXiTrackBar ... Das ist alles. Das Pack wird über den DSEditors.pas Registriert Dort steht, das wichtigste!
Delphi-Quellcode:
procedure Register;
begin RegisterComponents('DSPack', [TFilterGraph, TVideoWindow, TSampleGrabber, TFilter, TASFWriter, TDSTrackBar, TDSVideoWindowEx2]); RegisterPropertyEditor(TypeInfo(TMediaType), nil, '', TMediaTypePropertyClass); RegisterPropertyEditor(TypeInfo(TBaseFilter), nil, '', TBaseFilterPropertyClass); end; Hier wird die TDSTrackBar Registriert. Wenn ich nun das DSPack installiere funktioniert das auch. Lasse ich aber die Anwendung laufen kommt die Fehlermeldung das die Komponente TXiTrackBar schon registriert ist und sich im Pack XiControls befindet. Seltsamer weise funktioniert das in d7 in d2006 funktioniert es nicht. gruß EDIT: Der User hat einen Skin. Standardmäßig wird die TTrackbar position vom DSPack ausgegeben wenn ein Video spielt. Er will aber die TrackBar vom XI Pack verwenden wegen seinen Skin. Deshalb hat er das ganze Teil umgestrickt damit die position der TTrackBar nun auf der vom XI Pack umgeleitet wird. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:49 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 by Thomas Breitkreuz