Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Magazinreader (https://www.delphipraxis.net/96843-magazinreader.html)

KC The Mole 31. Jul 2007 19:06


Magazinreader
 
Hallo hallo,
wie geht es euch? Hoffe gut ^^. Dann will ich mal mit dem schönen Standardsatz beginnen: Ich bin neu hier und brauchte mal die Hilfe von ein paar netten, erfahrenen Programierern.
Es geht um folgende Sache: Seit einem Schuljahr hab ich an meinem Gymnasium Informatik(12.Klasse, jetzt 13.), es macht mir ziemlich Spaß und ich hab sogar 13 Punkte geschafft, was ich vor allem meinem Projekt zu verdanken hab, dass ich euch schildern möchte.
Da ich die Wissenszeitschrift ,,Welt der Wunder" ziemlich interessant und cool finde, aber das Papier ziemlich empfindlich ist, scanne ich die Ausgaben alle nach und nach ein, speicher sie im .pdf-Format(nur sehr geringer Speicherplatz, trotzdem super Qualität) und lege für jede Ausgabe ein eigenes .rar-Archiv an(auch um Platz zu sparen).
Es ist mir selbst gelungen, in mein Delphi 5 (daneben hab ich noch TurboDelphi 06) die möglichkeit des Öffnens von PDF-Dokumenten einzubauen, habe die AcroPDF-Komponente benutzt + LoadFile('');-Befehl. Ich kann in meinem Programm die verschiedenen PDF-Seiten laden, durchlesen, Schlagwortsuche nach bestimmten Artikeln durchführen, Artikel direkt anwählen und einzelne Ausgaben anwählen.
Man kann mit dem Programm also ziemlich bequem die Magazine lesen. Soweit so gut, diese Version war für die Schule (für mehr hatte ich da keine Zeit ^^"). Der einzige Haken an der Geschichte ist die Tatsache, dass die PDF-Dokumente bisher nur geladen werden können, wenn man sie vorher manuell aus dem WinRar-Archiv entpackt hat.
Jetzt möchte ich aber gerne eine neue Version des Programms erstellen. Das neue Programm soll die PDF-Dokumente direkt aus dem .rar-Archiv laden und anzeigen können. Auf diese Weise könnte man es sich nämlich sparen, jedesmal die Archive von Hand zu entpacken, bevor man das Programm benutzt.
Mein Freund aus dem Informatikkurs meint, das würde nicht funktionieren, in eurem Forum habe ich mich aber ein bischen in der Beziehung umgehört und gelesen, dass man dafür vielleicht eine UnRar.dll benutzen könnte oder ein TAbbrevia oder so. Habe mir diese UnRar.dll auch besorgt, allerdings ist mir noch immer leider schleierhaft, wie ich überhaupt mein Ziel erreichen kann? Es wäre total nett von euch, wenn ihr mir dabei helfen könntet :-D .
Also nochmal präzise das Problem: Möchte, dass mein Delphi-Programm die PDF-Dokumente direkt aus dem WinRar-Archiv laden und anzeigen kann (WinRar besitze ich übrigens).

Vielen Dank im vorraus,
KC

stz 31. Jul 2007 19:13

Re: Magazinreader
 
Moin und Willkommen in der DP

guck dir mal http://www.del-net.com/frmDFUnRar.html an. Da gibt es eine Delphi-Komponenten, die die Benutzung der UnRar.dll vereinfacht, und eine Beispielanwendung mit Sourcecode. Funktioniert ab D5.

Gruß
Malte

DP-Maintenance 31. Jul 2007 19:16

DP-Maintenance
 
Dieses Thema wurde von "Phoenix" von "Multimedia" nach "Sonstige Fragen zu Delphi" verschoben.
Also Dateien entpacken ist eher kein Multimedia. Deswegen verschieb ich das mal.

KC The Mole 2. Aug 2007 11:42

Re: Magazinreader
 
Hallo,
danke für den Tip! I hab die Application in Delphi 5 eingebaut und sie scheint zu funktionieren (jedenfalls gibt es keine Fehlermeldung, wenn man ein Programm mit einem UnRar-Objekt startet).
Allerdings verstehe ich leider immer noch nicht, wie ich damit zu meinem Ziel komme... :( (aber ich bin ja auch noch nicht so lange beim programmieren dabei).
Prinzipiell sollte der Spaß ja so ablaufen, hab ich mir überlegt: Beim starten des Programms sollen die ersten beiden Seiten des ersten Magazins angezeigt werden, was mir außerhalb des .rar-Archivs keinerlei Schwierigkeiten bereitet. In Verbindung mit dem Archiv müsste das bedeuten, dass das Programm die ersten beiden PDF-Dokumente entpackt, von mir aus in den gleichen Ordner (war mir noch nicht klar) oder an einen anderen, virtuellen Ort und sie von dort dann in die beiden PDF-Objekte lädt, wo sie angezeigt werden.
Hört sich im Prinzip recht einfach an, finde ich, nur habe ich noch Schwierigkeiten mit den entsprechenden Befehlen zum öffnen der Daten aus dem Archiv und zu ihrer anschließenden Verwendung.

Im Pseudocode sieht das vermutlich so aus:

procedure TForm1.FormCreate(Sender: TObject);

Visiere Archiv1.rar an;
extrahiere Seite1.pdf;
extrahiere Seite2.pdf;
lade Seite1.PDF in AcroPDF1;
lade Seite2.PDF in AcroPDF2;

Und zumindest das visieren und extrahieren müsste doch im UnRar-Objekt ablaufen, wenn ich mich nicht irre?
Nur wie, kann mir das freundlicherweise einer erklären? Schließlich möchte ich ja auch lernen und dann anderen weiterhelfen ^^.
Mit PDF hab ich ja alles selbst ausgeknobelt, und auch mit anderen Objekten wie den verschiedenen Benutzungsmöglichkeiten etwa von Grundobjekten wie Panels. Aber mit UnRar bin ich noch ratlos...^^"

stz 2. Aug 2007 21:00

Re: Magazinreader
 
Delphi-Quellcode:
var
  DFUnRar: TDFUnRar; //Variable, die die Instanz des Objektes enthalten soll
begin
  DFUnRar := TDFUnrar.Create(Self); //Instanz des Objektes erzeugen
  try //ab hier alle Fehler abfangen, damit das Objekt auf jeden Fall freigegeben wird
    with DFUnRar do
    begin
      FileName := ExtractFilePath(ParamStr(0)) + 'Test.rar'; //Dateiname des Archives angeben
      Directory := ExtractFilePath(ParamStr(0)) + 'Temp'; //Ausgabeverzeichnis (darf nicht auf \ enden!)
      ForceDirectories(Directory); //sicherstellen, dass temporäres Ausgabeverzeichnis auch existiert
      FileList.Clear; //Dateiliste der zu entpackenden Dateien leeren
      //Ist diese Liste leer, werden alle Dateien ins Ausgabeverzeichnis entpackt. Sonst nur die in der Liste enthaltenen Dateien.
      FileList.Append(Directory + '\readme.txt'); //Zu entpackende Dateien der Liste hinzufügen
      //Befindet sich die Datei in einem Unterverzeichnis im Archiv, so muss auch dieses mit angegeben werden
      Mode := DFRAR_EXTRACT; //Extract kann Dateien entpacken oder nur Inhaltsverzeichnisse erstellen (DFRAR_LIST)
      OverrideEvent := OR_NEVER; //Ist die Datei im Ausgabeverzeichnis bereits vorhanden, so auf keine Fall überschreiben (Alternative OR_ALWAYS)
      Extract; //Nun aber los ;-)
    end;
  finally
    DFUnRar.Free; //und nicht vergessen: Objekt auf brav wieder freigeben
  end;
Ich habe in dem Beispiel die Komponente nicht installiert und auf die Form "gezogen", sondern im Quelltext eine Instanz der Klasse erzeugt. Benötigt werden die Units DFUnRar.pas (muss in die uses-Klausel), die Unit unitUnRar.pas und die DLL unrar.dll, die alle im Programmverzeichnis liegen müssen.

Gruß
Malte

KC The Mole 6. Aug 2007 10:49

Re: Magazinreader
 
Aha, vielen Dank, das werde ich mir mal unbedingt anschauen ^^.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:57 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