Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Komponente in Komponente D2006 (https://www.delphipraxis.net/78383-komponente-komponente-d2006.html)

EWeiss 4. Okt 2006 09:17


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:
  { 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
TXiTrackBar ist eine Komponente welche sich in der XiControls Komponente befindet.
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?

Zacherl 4. Okt 2006 12:53

Re: Komponente in Komponente D2006
 
Wie ist denn deine Register procedure? Da liegt vermutlich das Problem, dass du TXiTrackBar nochmal registrierst, statt TDsTrackBar ...

Florian

EWeiss 4. Okt 2006 13:54

Re: Komponente in Komponente D2006
 
Zitat:

Zitat von Florian Bernd
Wie ist denn deine Register procedure? Da liegt vermutlich das Problem, dass du TXiTrackBar nochmal registrierst, statt TDsTrackBar ...

Florian

Bin mit D2006 noch nicht lange dran! Sorry
Gibts da irgendeine einstellung ?

TXiTrackBar wird ja nur neu registriert( was nicht geht )wenn es als uses im DSPack eingebunden ist.

gruß

Zacherl 4. Okt 2006 17:59

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:
type TDSTrackBar = class(...
Desweiteren ist in dieser Unit eine funktion Register nötig, um die neue Komponente in der Komponentenpalette anzumelden.

Delphi-Quellcode:
procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Standard', [TDSTrackBar]);
end;
Ich vermute mal, dass du

Delphi-Quellcode:
RegisterComponents('Standard', [TXiTrackBar])
anstelle von

Delphi-Quellcode:
RegisterComponents('Standard', [TDSTrackBar])
verwendet hast. Das führt dann natürlich dazu, dass Delphi meckert, da ja schon ein Komponententyp mit der Bezeichnung TXiTrackBar registriert wurde.

Ich hoffe, das wird dir helfen.
Florian

EWeiss 4. Okt 2006 18:39

Re: Komponente in Komponente D2006
 
Zitat:

RegisterComponents('Standard', [TXiTrackBar])
Nein !
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ß

Zacherl 4. Okt 2006 19:13

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

EWeiss 4. Okt 2006 20:21

Re: Komponente in Komponente D2006
 
Zitat:

Zitat von Florian Bernd
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

Sorry wir reden aneinander vorbei !
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:
unit XiControls;

interface

uses
  Classes, XiButton, XiProgressBar, XiPanel, XiTrackBar;

implementation

{$R XiControls.res}

procedure Register;
begin
  RegisterComponents('XiControls', [TXiPanel, TXiTrackBar, TXiProgressBar, TXiButton]);
end;

end.
dann gibt es die Package DSPack
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 03:10 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