Pascal Komponente DCU
-
Hallo zusammen
Ich benutze eine Komponente Names TRichView, soweit so gut. Innerhalb dieser Komponente gibt es eine weitere PascalKomponente, mit deren Hilfe man innerhalb von TRichViews direkt mit Flash Dateien umgehen kann.
Nun zu meinem Problem. Das installieren dieser zweiten Komponente schlägt leider fehl, mit der Fehlermeldung "ShockwaveFlashObjects_TLB.dcu" nicht gefunden.
Flash habe ich zuvor brav per ActiveX, innerhalb meines Cbuilders importiert. und die Dateien ShockwaveFlashObjects_TLB.cpp und ShockwaveFlashObjects_TLB.h erhalten. Ebenso sind ShockwaveFlashObjects_OCX.opj, ShockwaveFlashObjects_OCX.cpp und ShockwaveFlashObjects_OCX.dcr neu.
Nur die besagte DCU ist leider Gottes nicht darunter, DCU müsste ja auch eigentlich eine Delphi Geschichte sein, insofern kann ich das sogar verstehen.
Meine Frage ist nun, wie kann ich dieses PRoblem trotzdem zum Erfolg führen?
Innerhalb der Pascal Datei tritt der Fehler hier auf.
unit MyShockwaveFlash;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, OleCtrls,
ShockwaveFlashObjects_TLB; <<<<<< Da liegt der Hund begrabenFür Vorschläge bin ich sehr dankbar.
Gruss
Mirko
-
Ist da ne PAS- Datei dabei?
Die kann kompiliert werden.
-
Hi
Ja klar ist die Pascal Datei dabei. Die macht ja auch die Schwierigkeiten.
Aus der Readme
- Install component TMyShockwaveFlash from MyShockwaveFlash.pas.
You'll see TMyShockwaveFlash on ActiveX page of the Component Palette.
Ergo, bin ich auf Komponente -> Komponente installieren gegangen Über suchen zur Pas Datei. die wollte sich dann in der dclusr verewigen, aber beim compilieren meckert er nach dieser komischen DCU Datei.
Da die PAscal Datei nicht wirklich gross ist. poste ich sie mal mit.
unit MyShockwaveFlash;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, OleCtrls,
ShockwaveFlashObjects_TLB;type
TMyShockwaveFlash = class(TShockwaveFlash)
private
{ Private declarations }
FStream: TMemoryStream;
FTmpFileName: String;
procedure WriteFlash(Stream: TStream);
procedure ReadFlash(Stream: TStream);
protected
{ Protected declarations }
procedure DefineProperties(Filer: TFiler); override;
procedure Loaded; override;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
function LoadFlash(const FileName: String): Boolean;
function LoadFlashFromStream(Stream: TStream): Boolean;
procedure SaveFlash(const FileName: String);
procedure SaveFlashToStream(Stream: TStream);
procedure SetFlash(Source: TMyShockwaveFlash);
function InitFlash: Boolean;
procedure Reload;
procedure DoneFlash;
destructor Destroy; override;
published
{ Published declarations }
end;procedure Register;
implementation
procedure Register;
begin
RegisterComponents('ActiveX', [TMyShockwaveFlash]);
end;{ TMyShockwaveFlash }
constructor TMyShockwaveFlash.Create(AOwner: TComponent);
begin
inherited;
FStream := TMemoryStream.Create;
end;destructor TMyShockwaveFlash.Destroy;
begin
DoneFlash;
FStream.Free;
inherited;
end;function TMyShockwaveFlash.LoadFlash(const FileName: String): Boolean;
var fs: TFileStream;
begin
Result := False;
try
fs := TFileStream.Create(FileName, fmOpenRead);
FStream.SetSize(0);
FStream.CopyFrom(fs, fs.Size);
fs.Free;
Result := True;
except;
end;
end;function TMyShockwaveFlash.LoadFlashFromStream(Stream: TStream): Boolean;
begin
Result := False;
try
FStream.SetSize(0);
Stream.Position := 0;
FStream.CopyFrom(Stream, Stream.Size);
Result := True;
except;
end;
end;procedure TMyShockwaveFlash.SaveFlashToStream(Stream: TStream);
begin
FStream.Position := 0;
Stream.Size := 0;
Stream.CopyFrom(FStream, FStream.Size);
end;procedure TMyShockwaveFlash.SetFlash(Source: TMyShockwaveFlash);
begin
FStream.SetSize(0);
Source.FStream.Position := 0;
FStream.CopyFrom(Source.FStream, Source.FStream.Size);
end;procedure TMyShockwaveFlash.DefineProperties(Filer: TFiler);
begin
inherited;
Filer.DefineBinaryProperty('FlashMovie', ReadFlash, WriteFlash, FStream.Size>0);
end;procedure TMyShockwaveFlash.ReadFlash(Stream: TStream);
var v: Integer;
begin
Stream.ReadBuffer(v, sizeof(v));
if v>0 then begin
FStream.SetSize(0);
FStream.CopyFrom(Stream, v);
end;
end;procedure TMyShockwaveFlash.WriteFlash(Stream: TStream);
var v: Integer;
begin
v := FStream.Size;
Stream.WriteBuffer(v, sizeof(v));
FStream.Position := 0;
Stream.CopyFrom(FStream, v)
end;function TMyShockwaveFlash.InitFlash: Boolean;
var l: Integer;
fs: TFileStream;
begin
Result := False;
try
SetLength(FTmpFileName, 1000);
l := GetTempPath(1000, PChar(FTmpFileName));
SetLength(FTmpFileName,l);
if (Length(FTmpFileName)>0) and (FTmpFileName[Length(FTmpFileName)]<>'\') then
FTmpFileName := FTmpFileName+'\';
l := Random(1000);
while FileExists(FTmpFileName+IntToStr(l)+'.swf') do
inc(l);
FTmpFileName := FTmpFileName+IntToStr(l)+'.swf';
fs := TFileStream.Create(FTmpFileName, fmCreate);
FStream.Position := 0;
fs.CopyFrom(FStream, FStream.Size);
fs.Free;
Movie := FTmpFileName;
Result := True;
except;
end;
end;procedure TMyShockwaveFlash.DoneFlash;
begin
Stop;
DeleteFile(FTmpFileName);
FTmpFileName := '';
end;procedure TMyShockwaveFlash.Loaded;
begin
inherited;
if FStream.Size>0 then
InitFlash;
end;procedure TMyShockwaveFlash.SaveFlash(const FileName: String);
var fs: TFileStream;
begin
fs := TFileStream.Create(FileName, fmCreate);
try
FStream.Position := 0;
fs.CopyFrom(FStream, FStream.Size);
finally
fs.Free;
end;
end;procedure TMyShockwaveFlash.Reload;
begin
Stop;
Movie := FTmpFileName;
if FTmpFileName<>'' then
Play;
end;end.
gruss
Mirko
- Install component TMyShockwaveFlash from MyShockwaveFlash.pas.
-
Zu :ShockwaveFlashObjects_TLB.dcu
hats auch ne
ShockwaveFlashObjects_TLB.pasIst die Dabei? Die muss als Unit kompiliert werden - dabei entsteht eigentlich die DCU.
-
Aha
Ich beginne, glaube, zu verstehen, aber nein, leider nicht, die fehlt.
Hmmm. Wenn ich mal weiterdenke, könnte man über Delphi das Flash importieren, somit die pas Datei erhalten diese dann kompilieren und die Welt ist wieder rund?
Gruss
Mirko