![]() |
Variable an Unit von Komponente übergeben?
Zur Info:
Ich hab mir vor kurzer Zeit eine Komponente zum Splitten und Zusammenfügen von Dateien installiert. Will man eine Datei zusammenfügen, so wird die zusammengefügte Datei mit der Dateiendung XXX gespeichert. Ich habe die Dateiendung der "noch guten" Datei via Record in eine Datei gespeichert. (OpenDialog, dann wird die zusammen mit der Datei zum "Wiedervereinen" gespeichert). Die Dateiendung IM PROGRAMM SELBST aus der Datei auszulesen ist kein Problem. Es sind die ersten 3 Zeichen in der Datei, die hole ich mir wie folgt:
Delphi-Quellcode:
Ok.
Ex := copy(ExString, 0, 3);
Dass die Datei mit XXX gespeichert wird, steht in einer anderen Unit (FileSplitter.pas von der Komponente) Wie kann ich dieses Problem lösen? Die wichtigen Zeilen in dieser Unit sind:
Delphi-Quellcode:
Aber ich kann ja nicht 'XXX' durch Ex ersetzen. (In Ex ist die Dateiendung gespeichert).
begin
if FileExists(FSplitFileName) then begin { Make sure the filename is correct } if FFileName = '' then FFileName := ChangeFileExt(FSplitFileName, 'XXX'); // Hier müsste der Inhalt von "Ex" rein |
Re: Variable an Unit von Komponente übergeben?
Zeig mal die komplette Methode.
|
Re: Variable an Unit von Komponente übergeben?
Ok ist ziemlich lang:
Delphi-Quellcode:
{ Method UnSplit creates the original file from the split files. Name and
extension of the original file must be set in FileName property } procedure TFileSplitter.UnSplit; var i: Integer; Continue: Boolean; sFileName: TFileName; BytesRead, TotalRead: LongInt; begin if FileExists(FSplitFileName) then begin { Make sure the filename is correct } if FFileName = '' then FFileName := ChangeFileExt(FSplitFileName, '.XXX'); { Delete the resulting file if it exists } if FileExists(FFileName) then EraseFile(FFileName); { Prepare for writing to file } FFile := TFileStream.Create(FFileName, fmCreate); GetMem(FBuffer, FBufferSize); try i := 0; sFileName := FSplitFileName; { Read files one by one and write to resulting file } Continue := True; Signature.NumberOfFiles := 0; while Continue do begin if Assigned(FOnNeedDisk) then FOnNeedDisk(Self, i + 1, Signature.NumberOfFiles, Continue); if Continue then begin if FileExists(sFileName) then begin try FSplitFile := TFileStream.Create(sFileName, fmOpenRead); { Read the signature from the first split file } if i = 0 then FSplitFile.Read(Signature, SizeOf(Signature)); TotalRead := 0; while FSplitFile.Size <> FSplitFile.Position do begin BytesRead := FSplitFile.Read(FBuffer^, FBufferSize); FFile.Write(FBuffer^, BytesRead); TotalRead := TotalRead + BytesRead; { Call OnProgress event } if Assigned(FOnProgress) then FOnProgress(Self, (TotalRead * 100) div FSplitFile.Size); end; finally FSplitFile.Free; end; Inc(i); sFileName := ChangeFileExt(sFileName, '.' + StrZero(i, 3)); end else Continue := False; end; end; finally FreeMem(FBuffer); FFile.Free; end; end else raise EFileError.Create('Input file ''' + FSplitFileName + ''' does not exist.'); end; |
Re: Variable an Unit von Komponente übergeben?
IMHO sollte es so ohne großen Aufwand gehen:
Delphi-Quellcode:
Wenn keine Extension explizit angegeben wird, bleibt alles beim Alten, ansonsten kannst Du eine angeben, die dann verwendet wird.
procedure TFileSplitter.UnSplit(sExtension: string = '.XXX');
var i: Integer; Continue: Boolean; sFileName: TFileName; BytesRead, TotalRead: LongInt; begin if FileExists(FSplitFileName) then begin { Make sure the filename is correct } if FFileName = '' then FFileName := ChangeFileExt(FSplitFileName, sExtension); ... |
Re: Variable an Unit von Komponente übergeben?
Delphi-Quellcode:
Das Problem bei der ganzen Sache ist ja, dass ich keine Variable von meinem Projekt in diese Unit einbinden kann :) So wäre es ja immernoch quasi Unit-bezogen
(sExtension: string = '.XXX');
|
Re: Variable an Unit von Komponente übergeben?
Liste der Anhänge anzeigen (Anzahl: 1)
Erstelle Dir doch eine Property innerhalb der Kompo als Schnittstelle zu Deinem Programm.
[edit] OK, habe ich mal erledigt, aber nicht getestet (hatte keine Lust, die Kompo zu installieren). Du solltest eine neue Property CustomExt entdecken, welche die Extension aufnimmt.[/edit] |
Re: Variable an Unit von Komponente übergeben?
Ich weis nicht, ich glaube ihr versteht mich nicht :cry:
Jetzt heißt da ja eine Zeile:
Delphi-Quellcode:
Aber XXX ist immernoch da.
FCustomExt := '.XXX';
Also ich mein, mein Inhalt aus der Variablen sollte ja da rein, aber ich bekomme es auch nicht hin. |
Re: Variable an Unit von Komponente übergeben?
Ich glaube eher, Du verstehst mich nicht. Bevor Du die Komponente an die Arbeit schickst, weist Du ihr Deine Variable als gewünschte Extension zu.
Delphi-Quellcode:
[edit] Mal ein bisschen ausführlicher zum Mitschreiben:
FileSplitter.CustomExt := DeineVariable;
Delphi-Quellcode:
[/edit]
var bla: string;
begin bla := '.bla'; FileSplitter.CustomExt := bla; FileSplitter.UnSplit; end; |
Re: Variable an Unit von Komponente übergeben?
Delphi-Quellcode:
Nein, klappt kmischerweise immernoch nicht. Die Variable ist seltsamerweise immer leer
{ Component constructor... }
constructor TFileSplitter.Create(AOwner: TComponent); begin inherited; FFileName := ''; FCustomExt := 'XXX'; FSplitFileName := FFileName; FOutDifferent := False; FSize := 1457664; FBufferSize := 1457664; FReduceFirstSizeBy := 0; Signature.Copyright := 'Copyright'; Signature.NumberOfFiles := 0; end; |
Re: Variable an Unit von Komponente übergeben?
Moment, hast Du die Originaldatei überschrieben und das Package neu kompiliert? Dann solltest Du die neue Property im OI sehen können mit dem Initialwert '.XXX'
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:59 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-2025 by Thomas Breitkreuz