AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Variable an Unit von Komponente übergeben?
Thema durchsuchen
Ansicht
Themen-Optionen

Variable an Unit von Komponente übergeben?

Ein Thema von Tommy1988 · begonnen am 5. Okt 2007 · letzter Beitrag vom 5. Okt 2007
Antwort Antwort
Seite 1 von 3  1 23      
Tommy1988
(Gast)

n/a Beiträge
 
#1

Variable an Unit von Komponente übergeben?

  Alt 5. Okt 2007, 17:18
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:
Ex := copy(ExString, 0, 3); Ok.
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:
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
Aber ich kann ja nicht 'XXX' durch Ex ersetzen. (In Ex ist die Dateiendung gespeichert).
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#2

Re: Variable an Unit von Komponente übergeben?

  Alt 5. Okt 2007, 17:34
Zeig mal die komplette Methode.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Tommy1988
(Gast)

n/a Beiträge
 
#3

Re: Variable an Unit von Komponente übergeben?

  Alt 5. Okt 2007, 17:42
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;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#4

Re: Variable an Unit von Komponente übergeben?

  Alt 5. Okt 2007, 17:47
IMHO sollte es so ohne großen Aufwand gehen:
Delphi-Quellcode:
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);
...
Wenn keine Extension explizit angegeben wird, bleibt alles beim Alten, ansonsten kannst Du eine angeben, die dann verwendet wird.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Tommy1988
(Gast)

n/a Beiträge
 
#5

Re: Variable an Unit von Komponente übergeben?

  Alt 5. Okt 2007, 18:12
(sExtension: string = '.XXX'); 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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#6

Re: Variable an Unit von Komponente übergeben?

  Alt 5. Okt 2007, 18:15
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]
Angehängte Dateien
Dateityp: pas filesplitter_modifiziert_197.pas (21,2 KB, 3x aufgerufen)
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Tommy1988
(Gast)

n/a Beiträge
 
#7

Re: Variable an Unit von Komponente übergeben?

  Alt 5. Okt 2007, 19:22
Ich weis nicht, ich glaube ihr versteht mich nicht

Jetzt heißt da ja eine Zeile:
  FCustomExt := '.XXX'; Aber XXX ist immernoch da.
Also ich mein, mein Inhalt aus der Variablen sollte ja da rein, aber ich bekomme es auch nicht hin.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#8

Re: Variable an Unit von Komponente übergeben?

  Alt 5. Okt 2007, 19:36
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.FileSplitter.CustomExt := DeineVariable; [edit] Mal ein bisschen ausführlicher zum Mitschreiben:
Delphi-Quellcode:
var bla: string;
begin
  bla := '.bla';
  FileSplitter.CustomExt := bla;
  FileSplitter.UnSplit;
end;
[/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Tommy1988
(Gast)

n/a Beiträge
 
#9

Re: Variable an Unit von Komponente übergeben?

  Alt 5. Okt 2007, 20:33
Delphi-Quellcode:
{ 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;
Nein, klappt kmischerweise immernoch nicht. Die Variable ist seltsamerweise immer leer
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#10

Re: Variable an Unit von Komponente übergeben?

  Alt 5. Okt 2007, 20:36
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'
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:31 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