/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Hvordan startes et andet program fra Delph~
Fra : Kurt G


Dato : 02-06-07 13:24

Jeg har skrevet en hjælp til mit program i Word. Da der er flere billeder i
den, har jeg gemt den som web-side og fået en fil. der ender som *.mht.
Denne side åbnes fint med Internet Explorer.

Hvordan får jeg den vist ved f.eks. at trykke på "Hjælp" i menuen eller F1 i
mit program?

Mvh Kurt



 
 
Bjørn Lindel Kiær (03-06-2007)
Kommentar
Fra : Bjørn Lindel Kiær


Dato : 03-06-07 05:04

Kurt G oplod den Sat, 02 Jun 2007 14:23:55 +0200. sin røst:

> Jeg har skrevet en hjælp til mit program i Word. Da der er flere billeder i
> den, har jeg gemt den som web-side og fået en fil. der ender som *.mht.
> Denne side åbnes fint med Internet Explorer.
>
> Hvordan får jeg den vist ved f.eks. at trykke på "Hjælp" i menuen eller F1 i
> mit program?
>
> Mvh Kurt

uses
ShellAPI;

....

ShellExecute(Application.Handle, 'open', '<filnavn>', nil, nil, SW_SHOW);

burde gøre det. Vær opmærksom på at strengparametrene er af typen PChar,
ikke almindelige Pascal-strenge, så hvis du skal bruge indeholdet af en
variabel må du typecaste den:

ShellExecute(Application.Handle, 'open', PChar(FilNavn), nil, nil, SW_SHOW);

Bjørn

Kurt G (03-06-2007)
Kommentar
Fra : Kurt G


Dato : 03-06-07 07:38

"Bjørn Lindel Kiær" <bjoern.nospam+usenet@gmail.com> skrev i en meddelelse
news:pan.2007.06.03.04.03.42.295246@gmail.com...
> Kurt G oplod den Sat, 02 Jun 2007 14:23:55 +0200. sin røst:
>
>> Jeg har skrevet en hjælp til mit program i Word. Da der er flere billeder
>> i
>> den, har jeg gemt den som web-side og fået en fil. der ender som *.mht.
>> Denne side åbnes fint med Internet Explorer.
>>
>> Hvordan får jeg den vist ved f.eks. at trykke på "Hjælp" i menuen eller
>> F1 i
>> mit program?
>>
>> Mvh Kurt
>
> uses
> ShellAPI;
>
> ...
>
> ShellExecute(Application.Handle, 'open', '<filnavn>', nil, nil, SW_SHOW);
>
> burde gøre det. Vær opmærksom på at strengparametrene er af typen PChar,
> ikke almindelige Pascal-strenge, så hvis du skal bruge indeholdet af en
> variabel må du typecaste den:
>
> ShellExecute(Application.Handle, 'open', PChar(FilNavn), nil, nil,
> SW_SHOW);
>
> Bjørn

Tak. Det vil jeg prøve.
Mvh Kurt




John V. (05-06-2007)
Kommentar
Fra : John V.


Dato : 05-06-07 19:48


"Bjørn Lindel Kiær" <bjoern.nospam+usenet@gmail.com> skrev i en meddelelse
news:pan.2007.06.03.04.03.42.295246@gmail.com...
> Kurt G oplod den Sat, 02 Jun 2007 14:23:55 +0200. sin røst:
>
>> Jeg har skrevet en hjælp til mit program i Word. Da der er flere billeder
>> i
>> den, har jeg gemt den som web-side og fået en fil. der ender som *.mht.
>> Denne side åbnes fint med Internet Explorer.
>>
>> Hvordan får jeg den vist ved f.eks. at trykke på "Hjælp" i menuen eller
>> F1 i
>> mit program?
>>
>> Mvh Kurt
>
> uses
> ShellAPI;
>
> ...
>
> ShellExecute(Application.Handle, 'open', '<filnavn>', nil, nil, SW_SHOW);
>
> burde gøre det. Vær opmærksom på at strengparametrene er af typen PChar,
> ikke almindelige Pascal-strenge, så hvis du skal bruge indeholdet af en
> variabel må du typecaste den:
>
> ShellExecute(Application.Handle, 'open', PChar(FilNavn), nil, nil,
> SW_SHOW);
>
> Bjørn
Så er det fedt af vide hvad "nil,nil" egentlig bruges til....



Hauge (05-06-2007)
Kommentar
Fra : Hauge


Dato : 05-06-07 19:51

John V. wrote:
> Så er det fedt af vide hvad "nil,nil" egentlig bruges til....

tryk Ctrl-F1 oven i kommandoen, så får du hjælpen at se.

/Hauge



Arkimedes (04-06-2007)
Kommentar
Fra : Arkimedes


Dato : 04-06-07 09:34


"Kurt G" <kurt_g@guldbaek.net> skrev i en meddelelse
news:46616166$0$90265$14726298@news.sunsite.dk...
> Jeg har skrevet en hjælp til mit program i Word. Da der er flere billeder
> i den, har jeg gemt den som web-side og fået en fil. der ender som *.mht.
> Denne side åbnes fint med Internet Explorer.
>
> Hvordan får jeg den vist ved f.eks. at trykke på "Hjælp" i menuen eller F1
> i mit program?

------------------------------------------------------------------------------------------------
Kurt - her lidt forskellige måder at starte et andet program fra dit eget
program

I modsætning til ShellExecute kan nogen af nedenstående eksempler vente til
dit eget program er afsluttet inden det nye program starter.
Dette har især betydning, hvis man skal genstarte sit nuværende program.
------------------------------------------------------------------------------------------------

Function PFUExecAndWait(const FileName: string; const CmdShow: Integer):
Longword;
var { by Pat Ritchey }
//ExecAndWait('C:\Programme\WinZip\WINZIP32.EXE', SW_SHOW);

zAppName: array[0..512] of Char;
zCurDir: array[0..255] of Char;
WorkDir: string;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
AppIsRunning: DWORD;
begin
StrPCopy(zAppName, FileName);
GetDir(0, WorkDir);
StrPCopy(zCurDir, WorkDir);
FillChar(StartupInfo, SizeOf(StartupInfo), #0);
StartupInfo.cb := SizeOf(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := CmdShow;
if not CreateProcess(nil,
zAppName, // pointer to command line string
nil, // pointer to process security attributes
nil, // pointer to thread security attributes
False, // handle inheritance flag
CREATE_NEW_CONSOLE or // creation flags
NORMAL_PRIORITY_CLASS,
nil, //pointer to new environment block
nil, // pointer to current directory name
StartupInfo, // pointer to STARTUPINFO
ProcessInfo) // pointer to PROCESS_INF
then Result := WAIT_FAILED
else
begin
while WaitForSingleObject(ProcessInfo.hProcess, 0) = WAIT_TIMEOUT do
begin
Application.ProcessMessages;
Sleep(50);
end;
{
// or:
repeat
AppIsRunning := WaitForSingleObject(ProcessInfo.hProcess, 100);
Application.ProcessMessages;
Sleep(50);
until (AppIsRunning <> WAIT_TIMEOUT);
}

WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess, Result);
// Result := Application.Handle;
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
end;
end; { ExecAndWait}
---------------------------------------------------------------------------------------------------

Function PFUShellExecute_AndWait(FileName: string; Params: string):
LongInt;
var
exInfo: TShellExecuteInfo;
Ph: DWORD;
begin
FillChar(exInfo, SizeOf(exInfo), 0);
with exInfo do
begin
cbSize := SizeOf(exInfo);
fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
Wnd := GetActiveWindow();
ExInfo.lpVerb := 'open';
ExInfo.lpParameters := PChar(Params);
lpFile := PChar(FileName);
nShow := SW_SHOWNORMAL;
end;
if ShellExecuteEx(@exInfo) then
Ph := exInfo.HProcess
else
begin
ShowMessage(SysErrorMessage(GetLastError));
Exit;
end;
Result := GetForegroundWindow;
while WaitForSingleObject(ExInfo.hProcess, 50) <> WAIT_OBJECT_0 do
Application.ProcessMessages;
CloseHandle(Ph);
end;
---------------------------------------------------------------------------------------------------

Function PFURunExecutable(FileName :String; Visibility: integer;
TimeOut:LongWord): DWORD;
var MsgWaitForMultipleObjects_TimeOut:LongWord;

Procedure WaitFor( processHandle: THandle );
Var
ret: DWORD;
Begin
MsgWaitForMultipleObjects_TimeOut:=TimeOut;
Repeat
ret := MsgWaitForMultipleObjects(
1, { 1 handle to wait on }
processHandle, { the handle }
False, { wake on any event }
MsgWaitForMultipleObjects_TimeOut,
// TimeOut,
// INFINITE, { wait without timeout }
QS_PAINT or { wake on paint messages }
QS_SENDMESSAGE { or messages from other threads }
);
If ret = WAIT_FAILED Then Exit; { can do little here }
If ret = (WAIT_OBJECT_0 + 1) Then Begin
{ Woke on a message, process paint messages only. Calling
PeekMessage gets messages send from other threads processed.
}
{ While PeekMessage( MSG(, 0, WM_PAINT, WM_PAINT, PM_REMOVE ) Do
DispatchMessage( msg );}
End;
Until ret = WAIT_OBJECT_0;
End; { Waitfor }

Var { V1 by Pat Ritchey, V2 by P.Below }
zAppName:array[0..512] of char;
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;

Begin { WinExecAndWait32V2 }
StrPCopy(zAppName, FileName);
FillChar(StartupInfo, Sizeof(StartupInfo), #0);
StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
// StartupInfo.dwFlags :=STARTF_USESTDHANDLES;
StartupInfo.wShowWindow := Visibility;
If not CreateProcess(nil,
zAppName, { pointer to command line string }
nil, { pointer to process security attributes }
nil, { pointer to thread security attributes }
false, { handle inheritance flag }
CREATE_NEW_CONSOLE or { creation flags }
NORMAL_PRIORITY_CLASS,
nil, { pointer to new environment block }
nil, { pointer to current directory name }
StartupInfo, { pointer to STARTUPINFO }
ProcessInfo) { pointer to PROCESS_INF }
Then
Result := DWORD(-1) { failed, GetLastError has error code }
Else Begin
WaitForSingleObject(ProcessInfo.hProcess, TimeOut);
Waitfor(ProcessInfo.hProcess);
GetExitCodeProcess(ProcessInfo.hProcess, Result);
CloseHandle( ProcessInfo.hProcess );
CloseHandle( ProcessInfo.hThread );
End; { Else }
End; { WinExecAndWait32V2 }
---------------------------------------------------------------------------------------------------

Function PFUWinExecAndWait32(FileName: string; Visibility: Integer):
Longword;
var { by Pat Ritchey }
zAppName: array[0..512] of Char;
zCurDir: array[0..255] of Char;
WorkDir: string;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
StrPCopy(zAppName, FileName);
GetDir(0, WorkDir);
StrPCopy(zCurDir, WorkDir);
FillChar(StartupInfo, SizeOf(StartupInfo), #0);
StartupInfo.cb := SizeOf(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Visibility;
if not CreateProcess(nil,
zAppName, // pointer to command line string
nil, // pointer to process security attributes
nil, // pointer to thread security attributes
False, // handle inheritance flag
CREATE_NEW_CONSOLE or // creation flags
NORMAL_PRIORITY_CLASS,
nil, //pointer to new environment block
nil, // pointer to current directory name
StartupInfo, // pointer to STARTUPINFO
ProcessInfo) // pointer to PROCESS_INF
then Result := WAIT_FAILED
else
begin
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess, Result);
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
end;
end; { WinExecAndWait32 }
---------------------------------------------------------------------------------------------------


----- Original Message -----
From: "Kurt G" <kurt_g@guldbaek.net>
Newsgroups: dk.edb.programmering.pascal
Sent: Saturday, June 02, 2007 2:23 PM
Subject: Hvordan startes et andet program fra Delphi?


> Jeg har skrevet en hjælp til mit program i Word. Da der er flere billeder
> i den, har jeg gemt den som web-side og fået en fil. der ender som *.mht.
> Denne side åbnes fint med Internet Explorer.
>
> Hvordan får jeg den vist ved f.eks. at trykke på "Hjælp" i menuen eller F1
> i mit program?
>
> Mvh Kurt
>



Kurt G (11-06-2007)
Kommentar
Fra : Kurt G


Dato : 11-06-07 09:26

"Arkimedes" <peter.arkimedes@gmail.com> skrev i en meddelelse
news:4663ce8c$0$90265$14726298@news.sunsite.dk...
>
> "Kurt G" <kurt_g@guldbaek.net> skrev i en meddelelse
> news:46616166$0$90265$14726298@news.sunsite.dk...
>> Jeg har skrevet en hjælp til mit program i Word. Da der er flere billeder
>> i den, har jeg gemt den som web-side og fået en fil. der ender som *.mht.
>> Denne side åbnes fint med Internet Explorer.
>>
>> Hvordan får jeg den vist ved f.eks. at trykke på "Hjælp" i menuen eller
>> F1 i mit program?
>
> ------------------------------------------------------------------------------------------------
> Kurt - her lidt forskellige måder at starte et andet program fra dit eget
> program
>
> I modsætning til ShellExecute kan nogen af nedenstående eksempler vente
> til dit eget program er afsluttet inden det nye program starter.
> Dette har især betydning, hvis man skal genstarte sit nuværende program.
> ------------------------------------------------------------------------------------------------
KLIP

Det var en ordentlig omgang, det vil jeg gemme til senere, jeg nøjes med at
bruge ShellExecute i første omgang.
Tak for hjælpen.
/Kurt



Søg
Reklame
Statistik
Spørgsmål : 177414
Tips : 31962
Nyheder : 719565
Indlæg : 6407849
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste