Delphi-PRAXiS
Seite 2 von 2     12   

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)

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 14:07 Uhr.
Seite 2 von 2     12   

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