Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Datei?!?!?!??! (https://www.delphipraxis.net/2603-datei.html)

Chriss 30. Jan 2003 15:08


Datei?!?!?!??!
 
Hi @ all!
ich bins schon wieder :oops:

Ich möchte per klick auf ein Label eine von mir definierte Datei (*.doc)
öfnnen. Der enutzer soll keine Chance haben, sich selbst eine Datei zu suchen! Es muss DIESE eine Datei geöffnet werden. Geht das mit OpenDialog, oder kann man damit nur eine Datei auswählen?!

Christian Seehase 30. Jan 2003 15:10

Moin Chriss,

dann schreib' doch in's OnClick Ereignis des Labels den Code für das Laden der Datei, z.B. Memo1.Lines.LoadFromFile(<Dateipfad>).

CalganX 30. Jan 2003 15:17

Hi,
du bist einer von denen, die ein Verständnisproblem mit den Dialogen hat.
Alle Dialoge, die du unter dem Register "Dialogs" findest, führen keine Aktion aus! Sie sind einfach nur vorgefertigte Forms (sozusagen), die einfach nur dem Standard entsprechen. Wenn diese ausgeführt werden (per Execute) gibt Execute true zurück. Dann kannst du mit den ausgewählten Einstellungen was machen.
Allerdings, wie gesagt, ist der Dialog an sich völlig passiv!

Chris

Chriss 30. Jan 2003 15:27

ich kann die datei nicht in ein memo einlesen... n der datei sind grafiken!
deshalb möchte ich sie einfach öffnen!

eddy 30. Jan 2003 15:32

Hallo Chriss,

ich habe einen Menüpunkt, der die im Verzeichnis DokuPath (z.B. 'D:\irgendwo') hinterlegte Datei Hinweis1.doc mit Word öffnen soll.

Delphi-Quellcode:
procedure TForm.Hinweise1Click(Sender: TObject);
begin
  s := IncludeTrailingBackslash(DokuPath) + 'Hinweis1.doc';
  s := '"C:\Programme\Microsoft Office\Office\WinWord.exe" ' + s;
  WinExec(PChar(s),2);
end;
Natürlich kann der Anwender dann von Word per Öffnen einer Datei jede andere Worddatei auf den Bildschirm holen.

mfg
eddy

CalganX 30. Jan 2003 15:34

Nein! *argh*
Lieber ShellExecute statt WinExec nutzen! Einfach mal suchen!

Chris

Daniel B 30. Jan 2003 16:17

Hi,

ja Chris, ShellExecute ist hier gefragt. ;)
In der Library gibt es auch ein Beispiel zu. Nur das Du eddy, statt dem Pfad, "OpenDialog1.FileName" eingibst.
Der Dialog "OpenDialog", kann keine Dateien ausführen, es ist nur eine einfache Möglichkeit an den Pfad! der Datei zu kommen. Sonst nichts! Das gleiche gilt für den SaveDialog!

Grüsse, Daniel :hi:

eddy 30. Jan 2003 16:23

Hallo Chakotay1308,

"einfach mal suchen" ist super, aber eine Begründung und ein Beispiel wären mir lieber (am Besten gleich mit meinen Vorgaben). Ich bin schon zufrieden, daß die WinExec-Version funktioniert!! Und der gefundene Hilfetext für ShellExecute hilft mir nicht wirklich weiter (entspricht nicht meiner Logik oder ich bin zu dummdumm).

mfg
eddy

PS: Hat der Name Chakotay was mit dem 1. Commander der Voyager zu tun?

Daniel B 30. Jan 2003 16:29

Hallo eddy,

Du solltest Dich schon ein wenig anstrengen!

Hier ist der Link:

http://www.delphipraxis.net/viewtopic.php?t=53

Ansonsten bringt Dir auch dies etwas!

- Die Windows-API verfügt über eine Funktion namens ShellExecute, die Anwendungen ausführt. Dafür sind jedoch viele Parameter erforderlich, die in Anwendungen unter Delphi überflüssig sind. Die Unit FMXUtils stellt eine besser einsetzbare Alternative namens ExecuteFile zur Verfügung.
- ExecuteFile arbeitet auf zweierlei Weise. Wird der Name einer ausführbaren Datei übergeben, führt ExecuteFile diese Anwendung aus. Wird der Name eines Dokuments, das mit einer Anwendung verknüpft ist, übergeben, führt ExecuteFile die Anwendung aus und öffnet das Dokument automatisch mit der Anwendung.

Grüsse, Daniel :hi:

CalganX 30. Jan 2003 16:37

Zitat:

Zitat von eddy
PS: Hat der Name Chakotay was mit dem 1. Commander der Voyager zu tun?

Jau, siehe dazu auch den Beitrag "Neuer Nickname" (auch in der Statistik zu finden).

Chris

eddy 30. Jan 2003 19:38

Hallo Daniel B,

vielen Dank für den Link !! Hier muß keiner dumm sterben, selbst ich nicht!

Habe meinen Programmpunkt angepaßt:

Delphi-Quellcode:
begin
  s := AppBkSp(DokuPath) + 'Hinweis1.doc';
  ShellExecute(Handle, nil, PChar(s), nil, nil, SW_SHOW);
end;
Positiver Nebeneffekt: man landet sofort in Word, in der Version mit WinExec wurde Word zwar gestartet, aber mein Programm behielt den Focus.


Hallo Chakotay1308,

beim nächsten Mal bitte eine Link :P :mrgreen:
Hab' die 5 Seiten durchgesehen, man könnte denken, Ihr seid alle nicht ausgelastet ... Auch wenn es "nur" Klatsch & Tratsch ist, ich habe mich köstlich amüsiert. Wenn ich gewußt hätte, wieviel Spaß man bei Euch haben kann, hätte ich mich schon viel eher im Forum gemeldet. Ich werd' mir wohl auch noch so einen Namen zulegen: pkg2000 !!!


mfg
eddy

Daniel B 30. Jan 2003 19:46

Hallo eddy,
Zitat:

Zitat von eddy
Hier muß keiner dumm sterben, selbst ich nicht!

Natürlich nicht. :mrgreen:
Zitat:

Positiver Nebeneffekt: man landet sofort in Word, in der Version mit WinExec wurde Word zwar gestartet, aber mein Programm behielt den Focus.
Auch eines der Gründe, warum Borland sagt das man WinExec nicht mehr benutzen soll.
Heute hab ich auch noch in der D3Prof. Hilfe folgendes gefunden:
Zitat:

Die Windows-API verfügt über eine Funktion namens ShellExecute, die Anwendungen ausführt. Dafür sind jedoch viele Parameter erforderlich, die in Anwendungen unter Delphi überflüssig sind. Die Unit FMXUtils stellt eine besser einsetzbare Alternative namens ExecuteFile zur Verfügung.
ExecuteFile arbeitet auf zweierlei Weise. Wird der Name einer ausführbaren Datei übergeben, führt ExecuteFile diese Anwendung aus. Wird der Name eines Dokuments, das mit einer Anwendung verknüpft ist, übergeben, führt ExecuteFile die Anwendung aus und öffnet das Dokument automatisch mit der Anwendung.
Habe es aber selbst noch nie probiert.

Grüsse, Daniel :hi:

Luckie 30. Jan 2003 19:48

Zitat:

Zitat von eddy
"einfach mal suchen" ist super, aber eine Begründung und ein Beispiel wären mir lieber

Beispiel steht mit in der Library, wenn ich mich nicht irre.
Zitat:

(am Besten gleich mit meinen Vorgaben).
So nicht. :warn: Wir helfen gerne bei Problemen, aber erwarte nicht, dass wir dir dein Programm programmieren. Wenn du dein Programm programmiert haben willst, dann wende dich an eine Software-Firma, die induvidual Software entwickelt.
Zitat:

Ich bin schon zufrieden, daß die WinExec-Version funktioniert!! Und der gefundene Hilfetext für ShellExecute hilft mir nicht wirklich weiter (entspricht nicht meiner Logik oder ich bin zu dummdumm).
Ich weiß nicht, wo du gekuckt hast, aber wenn man etwas englisch kann, sollte der Text mit dem Beispiel klar werden.

eddy 30. Jan 2003 21:14

Hallo Daniel B,

habe jetzt auch noch ExecuteFile ausprobiert. Die PAS-Datei ist unter ...\Delphi5\Demos\Doc\Filmanex vergraben. Parameter haber ich unter
http://tipp.delphiclub.de/Scripts/Sh...pID=34&KatID=3 unter Nutzung von Google gefunden, da meine Hilfe (F1) nichts geliefert hat.

Delphi-Quellcode:
begin
  s := AppBkSp(DokuPath) + 'Hinweis1.doc';
//  ShellExecute(Handle, nil, PChar(s), nil, nil, SW_SHOW);
  ExecuteFile( s,'','',SW_SHOW);
end;
Interessanterweise wird in dem entsprechenden Programmteil ebenfalls ShellExecute aufgerufen:

Delphi-Quellcode:
function ExecuteFile(const FileName, Params, DefaultDir: string;
  ShowCmd: Integer): THandle;
var
  zFileName, zParams, zDir: array[0..79] of Char;
begin
  Result := ShellExecute(Application.MainForm.Handle, nil,
    StrPCopy(zFileName, FileName), StrPCopy(zParams, Params),
    StrPCopy(zDir, DefaultDir), ShowCmd);
end;
Optisch sieht es auf jeden Fall besser aus.



Hallo Luckie,

ist wohl heute nicht Dein Tag!!

Du irrst nicht, DanielB hat weiter oben doch den Link eingeblendet. Weder ShellExecute noch WinExec waren das Problem - nur ein Gedankenaustausch!
Deine Reaktion über meinen Wunsch: "Am besten gleich mit meinen Vorgaben" ist auch überzogen, aber ich schreibe beim nächsten Mal dahinter, wenn ich Spaß mache. Außerdem ist meinem Text von 20:38 ja zu entnehmen, daß ich es geschafft habe, meine Vorgaben selbst einzusetzen. Nirgendwo stand etwas in der Art: Programmiert mir doch bitte mein Programm .... Vielleicht schießt Du ja öfters Mal mit Kanonen auf Spazen! Wünsche wird man wohl noch äußern dürfen, auch wenn manche nicht in Erfüllung gehen.

Was das Beispiel betrifft: ich habe nicht weit genug gescrollt, die Beispiele habe ich erst gefunden, nachdem ich Deine Bemerkungen gelesen hatte.

Ich hoffe, das war es nun zu diesem wenig effektiven Teil.

An beide:
mfg
eddy

Daniel B 30. Jan 2003 21:29

Hi eddy,
Zitat:

Zitat von eddy
habe jetzt auch noch ExecuteFile ausprobiert. Die PAS-Datei ist unter ...\Delphi5\Demos\Doc\Filmanex vergraben.

Ja tatsächlich, habe ich auch unter D6PE und D3Pro. :P

[Code snippsel gesnippt]
Ja macht Sinn, man muss nur weniger Parameter übergeben. Eigentlich nicht schlecht, man müsste sich noch die Unit anschauen, was noch dabei ist, sonst hat man nur deswegen wieder eine Unit eingebunden die das Programm nur grösser macht.
Muss ich mir mal in Ruhe anschauen.
Danke für die Info!http://n-digital.info/Bilder/daumen.gif

Grüsse, Daniel :hi:

Luckie 30. Jan 2003 21:35

Kuckt euch mal an, was ExecuteFile macht:
Delphi-Quellcode:
function ExecuteFile(const FileName, Params, DefaultDir: string;
  ShowCmd: Integer): THandle;
var
  zFileName, zParams, zDir: array[0..79] of Char;
begin
  Result := ShellExecute(Application.MainForm.Handle, nil,
    StrPCopy(zFileName, FileName), StrPCopy(zParams, Params),
    StrPCopy(zDir, DefaultDir), ShowCmd);
end;
Und was ist so schwer daran Shellexecute aufzurufen? :roll:

Daniel B 30. Jan 2003 21:40

Naja, man übergibt drei Parameter weniger.

Grüsse, Daniel :hi:


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