Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Office-Objekte übers Internet verschicken (https://www.delphipraxis.net/123867-office-objekte-uebers-internet-verschicken.html)

Admirandis 10. Nov 2008 16:29


Office-Objekte übers Internet verschicken
 
Hallo zusammen!

Ein Kollege und ich schreiben unsere Vorlesungen beide mit dem Laptop mit (Beide Win Vista und Office 2007). Nun haben wir beide sehr oft Mathtype-Formeln und Visio Zeichnung und wir suchen nach einem Weg diese übers Netz an den anderen zu schicken. praktisch Icq für Office-Objekte.

Hat jemand eine Idee wie man das realisieren könnte bzw. sonstige Tipps?

Grüße Admirandis

Kalfany 11. Nov 2008 08:51

Re: Office-Objekte übers Internet verschicken
 
ich denke der einfachste weg wird die zwischenablage sein denn beim kopieren packt office ja alle infos die du brauchst in irgend ein metaformat ... du bräuchtest also nur so eine art Clipboardwatcher der dann das was du verschicken willst packt (MS arbeitet nicht unbedingt resourcen schonenen) und dann verschickt ... und auf der gegenseite entpackst du das ganze wieder und schiebst es in die zwischenablage.

evtl. könnte man daraus auch ein plugin für miranda oder qip machen ... dann sparst du dir den ganzen netzwerk / kommunikations teil

Admirandis 11. Nov 2008 08:54

Re: Office-Objekte übers Internet verschicken
 
Klingt gut! Das einzige Problem wäre aber, dass es bei nem Plugin dann wahrscheinlich über "Datei senden" gehen müsste, und das frisst wieder Zeit.
Oder kennt da jemand eine anderen Weg?

Grüße Admirandis

mschaefer 11. Nov 2008 09:32

Re: Office-Objekte übers Internet verschicken
 
Moin, moin,

von MS Groove oder eine Internet-Zwischenablage
und sonst ein gemeinsames FTP-Laufwerk viaNetDrive

Grüße // Martin

Admirandis 11. Nov 2008 13:30

Re: Office-Objekte übers Internet verschicken
 
@Martin: Die Lösungen von dir sind sicher net schlecht, wenn man ganze Dokumente synchronisieren will, aber wir wollen ja nur objekte kopieren. Meiner bescheidenen Meinung nach ist das so wie mit Kanonen auf Spatzen schiessen (nix für ungut).

Hab mir jetzt noch bissl was zamgesucht. Wahrscheinlich werd ich es einfach über ein IMAP Konto austauschen. geht glaub ich am schnellsten und sollte gleichzeitig auch verschlüsselt sein. Im Fall eines Google Postfaches hätte man mit 7GB auch wunderbar viel Platz.

Admirandis 11. Nov 2008 14:20

Re: Office-Objekte übers Internet verschicken
 
Hm, hat irgendjemand schon Erfahrung mit der TIdIMAP4 Komponente von Indy gemacht? Krieg das irgendwie nicht zum laufen :-(

OregonGhost 11. Nov 2008 14:44

Re: Office-Objekte übers Internet verschicken
 
Soweit es Formeln betrifft: Wenn ich mich recht entsinne, kann Office 2007 seine Formeln als MathML (d.h. als XML) exportieren und auch wieder importieren. Das könnte man also auch "mal schnell" per ICQ als Text austauschen.

Admirandis 11. Nov 2008 14:50

Re: Office-Objekte übers Internet verschicken
 
Liste der Anhänge anzeigen (Anzahl: 1)
Jo, Word kann aber nur das ganze File als XML abspeichern. und das will ich ja wieder net. Ausserdem ist der XML Text von einer Formel auch schon ziemlich lang (siehe Anhang). Weiß nich ob das so ne prickelnde Lösung wäre.

Haltet ihr denn gar nix davon die Zwischenablage über IMAP zu kopieren?

Volle 11. Nov 2008 15:03

Re: Office-Objekte übers Internet verschicken
 
warum machst du denn so einen umweg ?
Es ist ja nicht so extrem schwer diese Daten ohne "protokoll" ueber tcp zu versenden. schau doch einfach nach ob sich so ne formel in der zwischenablage befindet, wenn ja verschicke sie.

auf der gegenseite bringste ne meldung sobald ne formel empfangen wurde ob man sie in die zwischenablage kopieren moechte.

Ich wuerd da wirklich nich ueber imap gehen oder so ..

Admirandis 11. Nov 2008 15:08

Re: Office-Objekte übers Internet verschicken
 
also in der zwischenablage ist nix zu finden... hat mich gewundert. wie bringt mathtype denn die formeln ins word o_O oder stellt der nach dem kopieren die alte zwischenablage wieder her?

Kalfany 11. Nov 2008 15:08

Re: Office-Objekte übers Internet verschicken
 
Liste der Anhänge anzeigen (Anzahl: 1)
ich find IMAP jetzt zwar nicht die schlechteste lösung ... aber eigentlich ist IMAP nicht für sowas gemacht worden. ich würd eher mal in die richtung JABBER schaun ... das erfordert evtl. einen tick mehr einarbeitungszeit ... aber über das protokoll kannst du eig. alles was du willst verschicken ... text, daten, audio, video ... ich denke mal das du damit auf längere sicht weniger arbeit (bzw. probleme) haben wirst als mit IMAP


EDIT:
ich würd mir mal son clipboardviewer installieren und schaun was wört da so alles rein packt ....
im anhang mal ein beispiel (ist zwar keine formel, aber da dürfte ja nicht soviel unterschied sein ... und ich vermute mal das die ganzen (wichtigen) infos in dem enhanced metafile drin sind).

Admirandis 11. Nov 2008 15:26

Re: Office-Objekte übers Internet verschicken
 
Folgendes:

Wenn ich eine Mathtype Formel aus Word kopiere ist das einzige was ich aus dem Clipboard rausbekomme ein Gif. Schade!

Wenn ich aber die Formel direkt aus Mathtype rauskopiere, dann krieg ich was zusehen im Clipboard . Nur wie krieg ich den XML-Code ins Word und wie kriege ich ihn aus dem Clipboard?

mschaefer 11. Nov 2008 16:28

Re: Office-Objekte übers Internet verschicken
 
Also über die kleine Lösung mit dem NetDrive könnte man doch mal nachdenken. Wenn Ihr beide ein Zentraldokument mit zwei Subdokumenten anlegt, dann könnte eines davon auf dem FTP-Laufwerk liegen. Die auszutauschenden Formeln würde man in den Abschnitt des Austauschsubdokuments legen, sodass sie für beide verfügbar sind.

Oder man hat halt ein Wörddokument auf dem FTP-Laufwerk wo die Formeln und die dazugehörigen Erklärungen liegen, denn Formel alleine ist oft ungüngstig.

Grüße // Martin

Admirandis 11. Nov 2008 16:45

Re: Office-Objekte übers Internet verschicken
 
@Martin: Ich versteh schon was du meinst, aber das mit den Worddokumenten wird nie so schnell sein, wie wenn du es einfach über die Zwischenablage kopierst.

Wenn du das WordFile auf dem FTP liegen hast, muss man es doch ausserdem immerwieder neuladen, oder versteh ich da was falsch?

EDIT:
Habe hier einen Eintrag bei den Schweizern gefunden der eigtl perfekt passt: SwissDelphiCenter
Einzig und allein das Format müsste man noch ändern, so dass nur noch "MathML Presentation" und Visio Objekte als Typen angenommen werden. Dann wärs das schon.

Habt ihr eine Idee wie man das machen könnte?

Admirandis 21. Nov 2008 17:42

Re: Office-Objekte übers Internet verschicken
 
Hallo wiedermal!

Also, das mit der Zwischenablage hab ich inzwischen gelöst: Man nehme einfach ein Richedit. Fügt die Zwischenablage ein und speichert das ganze Feld ab
Delphi-Quellcode:
JvRichEdit1.Lines.SaveToFile();
Genauso kann man es auch wieder laden. Also ganz einfach eigtl. Sogar sehr praktisch, weil das Richedit auch normale Dateien einfügen kann o_O

Was IMAP angeht: Hab ich nicht geschafft. Keine Ahnung woran das lag.
Deswegen geht das ganze jetzt über einen FTP-Server. Ist nicht schlimmer und nicht besser. Insofern nicht viel um!

Nun hab ich aber noch eine Frage:
Ich benutze dafür die Indy-Komponente idFTP. Blöderweise hängt die ganze Form, wenn ich was hoch- oder runterlade. Macht es Sinn, die ganze Komponente in einen neuen Thread auszulagern? Oder was könnt ihr mir sonst empfehlen?

Grüße Admirandis

jfheins 21. Nov 2008 17:45

Re: Office-Objekte übers Internet verschicken
 
Es git auch eine TIdAntiFreeze Komponente, aber das mit dem Thread ist eigentlich sauberer.
Für normale Anwendungen muss das aber nicht sein, da reicht die AntiFreeze Kompo aus ;)

Admirandis 21. Nov 2008 17:51

Re: Office-Objekte übers Internet verschicken
 
Jo, aber die AntiFreeze hatte ich schon drauf. blöderweise ohne Erfolg... muss man irgendwas beachten, wenn man den FTP in einen eigenen Thread extrahiert? Irgendwie hängt meine Main-Form dann immer noch :-(

jfheins 21. Nov 2008 18:31

Re: Office-Objekte übers Internet verschicken
 
Zitat:

Zitat von Admirandis
Jo, aber die AntiFreeze hatte ich schon drauf. blöderweise ohne Erfolg...

Du hast sie aber nicht einfach nur aufs Form geklatscht, oder?

Ich glaube, mann muss sie noch aktivieren und natürlich verknüpfen.

Admirandis 21. Nov 2008 18:43

Re: Office-Objekte übers Internet verschicken
 
Zitat:

Zitat von jfheins
Ich glaube, mann muss sie noch aktivieren und natürlich verknüpfen.

o_O Was muss man denn damit machen? Im ObjektInsp. hab ich sonst auch nix gefunden. Deswegen dachte ich...

Admirandis 22. Nov 2008 14:33

Re: Office-Objekte übers Internet verschicken
 
Servus!

Ich hab jetzt nochmal versucht nach besten Gewissen die ganzen FTP Zugriffe in einen eignen Thread auszulagern. Blöderweise geht es immer noch nicht -.-

Hier mal der Code von der Main:
Delphi-Quellcode:
unit Office_Clipper;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, MyFTP, ExtCtrls, JvExControls, JvXPCore, JvXPButtons, JvLED, StdCtrls;

type
  TForm1 = class(TForm)
    ConnectButton: TJvXPButton;
    updatetimer: TTimer;
    Connectedled: TJvLED;
    FileBox: TListBox;
    procedure updatetimerTimer(Sender: TObject);
    procedure ConnectButtonClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
   connected: boolean;
    ftp: TMyFTP;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
ftp := TMyFTP.create;

ftp.set_host('myserver.de');
ftp.set_user('myuser');
ftp.set_password('mypassword');

end;

procedure TForm1.ConnectButtonClick(Sender: TObject);
begin
if ftp.connect = false then
      showmessage('Fehler beim Erstellen der Verbindung!')
  else
    begin
      ftp.set_directory('mydirectory');
      updatetimer.Enabled := true;
    end;
end;

procedure TForm1.updatetimerTimer(Sender: TObject);
begin

connected := ftp.get_state;

if connected = true then
    begin
      ConnectedLED.Status := true;
      ConnectedLED.Active := false;
      ftp.get_list(FileBox);
    end
  else
    begin
      ConnectedLED.Status := false;
      ConnectedLED.Active := true;
    end;

end;

end.
und hier noch der Code von meinem FTP-Thread:
Delphi-Quellcode:

unit MyFTP;

interface

uses Windows, SysUtils, Classes, Dialogs, IdFTP, Variants, StdCtrls;

type
TMyFTP = class(TThread)
  private
    filename, host, user, password, directory: string;

  protected
    procedure execute; override;

  public
    constructor create; virtual;

    procedure upload;
    procedure download;

    procedure set_host(aHost: string);
    procedure set_user(aUser: string);
    procedure set_password(aPassword: string);
    procedure set_directory(aDirectory: string);

    function connect: boolean;
    function get_state: boolean;
    procedure get_list(aListbox: TListbox);

  end;

var
 ftp: TidFTP;

implementation

/////////////////////     FTP - THREAD    ////////////////////////

//Creation///
procedure TMyFTP.Execute;
begin
 while not Terminated do
        WaitFor;

 if Terminated then
    ftp.Free;
end;

constructor TMyFTP.create;
begin
  inherited create(true);
  freeOnTerminate := true;
  ftp := TIdFTP.Create(nil);
end;
///



//Up- and Download///
procedure TMyFTP.upload;
begin

end;

procedure TMyFTP.download;
begin

end;
///



//Settings///
procedure TMyFTP.set_host(aHost: string);
begin
ftp.Host := aHost;
host := aHost;
end;

procedure TMyFTP.set_user(aUser: string);
begin
ftp.Username := aUser;
user := aUser;
end;

procedure TMyFTP.set_password(aPassword: string);
begin
ftp.Password := aPassword;
password := aPassword;
end;

procedure TMyFTP.set_directory(aDirectory: string);
begin
ftp.ChangeDir(aDirectory);
directory := aDirectory;
end;
///



//Connection///
function TMyFTP.connect;
begin
  ftp.Connect;

if ftp.Connected = true then
    result := true
  else
    result := false;
end;

function TMyFTP.get_state;
begin
result := ftp.Connected;
end;
///



//Returns///
procedure TMyFTP.get_list(aListbox: TListbox);
begin
ftp.List(aListbox.Items, '', false);
end;
///

//////////////////////////////////////////////////////////////////

end.
Da das mein erstes Projekt ist, wo ich einen eigenen Thread benutze kann es sein, dass hier noch was falsch ist. Ich hoffe ihr könnt mir sagen, wo mein Fehler liegt!

Grüße Admirandis


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:09 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 by Thomas Breitkreuz