Avatar billede cult Nybegynder
04. december 2000 - 15:34 Der er 30 kommentarer og
2 løsninger

Nybegynder

Kan man finde noget på nettet om de foskellige koder til Delphi 4???? Jeg er HELT nybegynder så det skal helst være noget der er nemt at forstå.
Jeg vil også meget gerne have at vide (Hurtigt) hvad man skal skrive for at starte et program. f.eks. Notepad eller Explorer
Avatar billede borrisholt Novice
04. december 2000 - 15:36 #1
Avatar billede borrisholt Novice
04. december 2000 - 15:39 #2
Avatar billede microtec Nybegynder
04. december 2000 - 15:56 #3
Du kan starte et andet program ved hjælp af \"shellexecute\". Det kunne se således ud:

procedure TForm1.Button1Click(Sender: TObject);
var
  tmp : pchar;
begin
  shellexecute(handle, \'open\', \'filnavn\',tmp,\'sti-til-filnavn\',SW_SHOW);
end;
Avatar billede cult Nybegynder
04. december 2000 - 17:59 #4
Det prøver jeg lige....
Avatar billede cult Nybegynder
04. december 2000 - 18:46 #5
Jeg gør sikkert et eller andet forkert....
Jeg får denne besked:

[Error] ProgramManager.pas(46): Undeclared identifier: \'shellexecute\'

Kan du ikke prøve at skrive hvad man HELT præcist skal skrive for at starte f.eks. C:\\Windows\\Notepad.exe ???
Avatar billede borrisholt Novice
04. december 2000 - 18:48 #6
har du husket

uses
  shellAPi;

?

Jens B
Avatar billede microtec Nybegynder
04. december 2000 - 22:14 #7
borrisholt har ret i at \"shellAPi\" skal med under Uses declare i toppen af programmet. Det tog jeg nok lidt for givet ;o)

Et komplet program der starter Notepat kunne se således ud (Du behøver ikke at angive \'sti-til-filnavn\' når filen er i Windows-directoriet):


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses
  shellAPi;


{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
  tmp : pchar;
begin
  shellexecute(handle, \'open\', \'Notepad.exe\',tmp,\'\',SW_SHOW);
end;


end.
Avatar billede cult Nybegynder
05. december 2000 - 08:46 #8
nej jeg brugte ikke \"shellAPI\" så det prøver jeg lige... (jeg skrev at jeg var helt nybegynder...) :-)
Avatar billede cult Nybegynder
05. december 2000 - 17:29 #9
Ja, du accepterer delphi koden.
Men når jeg starter programmet og klikker på \"Paint\" starter paint og skriver:
I½.bmp indeholder en ugyldig sti. Imaging og Wordpad gør det samme. Har jeg nu klumret i det igen?
Avatar billede borrisholt Novice
05. december 2000 - 17:39 #10
Det er fordi du skal angive fuld sti til dit program. og husk ekstentionen. Altså C:\\winnt\\notepad.exe

Jens B
Avatar billede microtec Nybegynder
05. december 2000 - 20:18 #11
Jeg havde nu testet koden før jeg postede til dig. Under Win-98 behøver du ikke at angive nogen sti for at få fat i notepad (det skal man heller ikke under Win-95, for der har jeg selv anvendt eksemplet tidligere).
Avatar billede cult Nybegynder
05. december 2000 - 21:06 #12
Nej Notepad virker fint, men Paint, Imaging og Wordpad fungerer ikke. Jeg kan heller ikke få den til at starte Kontrolpanel: C:\\Windows\\Control.exe
Avatar billede cult Nybegynder
06. december 2000 - 19:09 #13
ved i hvad der kunne være galt???
Avatar billede borrisholt Novice
07. december 2000 - 08:51 #14
Kontrol panel allpets skal køres på en anden måde. Den kan du køre med den her procedure :

Function RunControlPanelApplet( sAppletFileName : String) : Integer;
begin
Result :=WinExec( PChar(\'rundll32.exe shell32.dll,\'+\'Control_RunDLL \'+sAppletFileName), SW_SHOWNORMAL);
end;


Den kankaldes således :

RunControlPanelApplet(\'telephon.cpl\');


Jeg har også en funktion her til at køre en fil med :

Function ExecuteFile(const FileName : String; Params : String = \'\'; DefaultDir: String = \'\'; ShowCmd: Integer = SW_SHOWNORMAL): THandle;


kan kaldes med fx :
ExecuteFile(\'Notepad.exe\');

Nu har vi så baladen med hvis nu at filen du ønsker at køre ikke ligger på path. Så skal du angive fuld sti til den altså :

ExecuteFile(\'C:\\MyDir\\MySubDir\\MySubDir2\\MyFile.exe\');

Mht Paint. Så hedder den MSPaint.exe og ligger i dit system blblotek. Dit system biblotek ligger forskellige stedder på forskellige operativ systemer. på WIndows NT 4.0 og 2000 hedder der (som standard) C:\\Winnt\\System32. På din maskine hedder den vist nok
C:\\Windows\\System. Det har Windows heldig vis en mekanisme der kan fortælle dig. Den har jeg skrevet en Pascal Wrappere til :

Den her funktion giver dig navnet på dit system biblotek :

Function GetSystemDirectory : String;
begin
SetLength(Result, MAX_PATH);
Windows.GetSystemDirectory(PChar(Result),MAX_PATH);
SetLength(Result, Pred(Pos(#0,Result)));
end;


Jens B

Avatar billede cult Nybegynder
07. december 2000 - 11:56 #15
Paint ligger i Windows 98SE (som jeg bruger) i C:\\Windows.
Avatar billede cult Nybegynder
07. december 2000 - 11:59 #16
Når jeg trykker på PAINT i mit program kommer der en boks op hvor der står \"I½.bmp indeholder en ugyldig sti\" (som jeg skrev før). Det er PAINT der skriver det. ikke mit program.
Avatar billede borrisholt Novice
07. december 2000 - 12:09 #17
har du prøvet :

ExecuteFile(\'C:\\Windows\\msPaint.exe\');

Jens B
Avatar billede microtec Nybegynder
07. december 2000 - 12:12 #18
Er du sikker på at \"I½\" ikke stammer fra dit program? Det er jo rigtigt at det er et ugyldigt fil-navn.
Avatar billede cult Nybegynder
08. december 2000 - 14:57 #19
Jo det er nok mit program der får paint til at skrive sådan. men jeg har jo ikke skrevet noget med I½ i programmet...
Jeg prøver lige \"Executefile\"...
Avatar billede cult Nybegynder
08. december 2000 - 20:57 #20
Execute file... Delphi skriver igen Undeclared identifier. skal man skrive noget før der også?
Avatar billede borrisholt Novice
11. december 2000 - 11:30 #21
Ja du skal implemtere dem som jeg har vist dig ...

Jens B
Avatar billede microtec Nybegynder
11. december 2000 - 11:51 #22
borrisholt >> Enten mangler der noget af din \"ExecuteFile\" eller også erklære du den utrolig \"frækt\" (Lidt for indforstået for en begynder og en der har arbejdet med Delphi i et par år) ;o)

Jeg kan for øvrigt ikke få lov til at lave tildeling til konstanter i en erklæring af en funktion. Er det fordi jeg benytter Delphi 2?


Avatar billede borrisholt Novice
11. december 2000 - 11:55 #23
Det er fordi jeg implemterer den utroligt frækt, med default parametere .. prøv i stedet en headder som den her :

Function ExecuteFile(const FileName : String; Params : String; DefaultDir: String; ShowCmd: Integer): THandle;


kan kaldes med fx :
ExecuteFile(\'Notepad.exe\',\'\',\'\', SW_SHOWNORMAL);

Jens B

Avatar billede microtec Nybegynder
11. december 2000 - 12:08 #24
borrisholt >> Det er vist lidt for \"frækt\" :o)
Delphi 2 vil i hvert fald ikke være med til en funktion uden \"BEGIN\" og \"END\".

Selv om jeg tilføjer disse virker det stadig ikke.
Avatar billede cult Nybegynder
17. december 2000 - 13:00 #25
borrisholt, kan du ikke prøve at skrive PRÆCIS hvad man skal skrive for at starte Notepad. Med det hele....?????
Avatar billede cult Nybegynder
17. december 2000 - 13:02 #26
Jeg har fordoblet pnt.
Avatar billede borrisholt Novice
18. december 2000 - 08:37 #27
Nå men prøg så det her :

først lige nogle hjælpe funktioner du kan drage nytte af :

uses
  shellAPi;

Function  GetWindowsDirectory : String;
//-------------------------------------
//The GetWindowsDirectory Function retrieves the path
//of the Windows directory. The Windows directory
//contains such files as Windows-based applications,
//initialization files, and Help files.
//-------------------------------------
begin
SetLength(Result, MAX_PATH);
Windows.GetWindowsDirectory(PChar(Result), MAX_PATH);
SetLength(Result, Pred(Pos(#0,Result)));
end;

Function GetSystemDirectory : String;
//-------------------------------------
//The GetSystemDirectory Function retrieves the path
//of the Windows system directory. The system directory
//contains such files as Windows libraries, drivers, and font files.
//-------------------------------------
begin
SetLength(Result, MAX_PATH);
Windows.GetSystemDirectory(PChar(Result),MAX_PATH);
SetLength(Result, Pred(Pos(#0,Result)));
end;


//så den etenlige funktion til at exekvere en fil med :

Function ExecuteFile(const FileName : String): THandle;
//-------------------------------------
//The ExecuteFile Function opens or prints a specified file.
//The file can be an executable file or a document file.
//If the Function succeeds, the return value is the instance handle
//of the application that was run. Else the return value is an error
//value that is less than or equal to 32
//-------------------------------------
var
  DefaultDir: String;
begin
  DefaultDir := GetCurrentDir;
  Result := ShellExecute(Application.MainForm.Handle, nil, PChar(FileName), nil, PChar(DefaultDir), SW_SHOWNORMAL);
end;


//Så hvordan man kkalder funktionen :
procedure TForm1.Button1Click(Sender: TObject);
begin
  ExecuteFile(GetWindowsDirectory+\'\\Notepad.exe\');
end;

Jens B
Avatar billede cult Nybegynder
18. december 2000 - 19:55 #28
Det prøver jeg lige...
Avatar billede cult Nybegynder
24. december 2000 - 11:48 #29
Det virker stadig ikke...... er du sikker på at det virker i Delphi 4 Standard?
Avatar billede cult Nybegynder
09. januar 2001 - 20:36 #30
Undskyld den lange ventetid.... men jeg har lukket spørgsmålet fordi jeg ikke mener der sker mere i det. Jeg takker for hjælpen.
Avatar billede microtec Nybegynder
09. januar 2001 - 21:29 #31
cult >> Det er OK. Du har jo ikke helt fået det til at virke. Jeg vender tilbage, hvis jeg finder ud af mere.
Avatar billede cult Nybegynder
10. januar 2001 - 18:17 #32
Lyder godt.
Jeg lader være med at fjerne smp. fra listen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester