Avatar billede koder Nybegynder
10. juni 1999 - 10:33 Der er 13 kommentarer og
1 løsning

Hjælp I Delphi!!


Jeg er lige begyndt at bruge delphi, så jeg kunne godt tænke mig at vide hvad man skal skrive,  hvis man skal åben et program (EXE fil)
Håber at der er nogle der kan hjælpe!!!
Avatar billede fehaar Nybegynder
10. juni 1999 - 10:43 #1
Det kan ikke lade sig gøre at åbne en .EXE fil.
Man kan åbne projekter eller andre filer der indeholder kildekode som man derefter kan kompilere til at være en .EXE fil. Men det er ikke muligt at lave "baglæns kovertering" af allerede kompilerede programmer.
Avatar billede koder Nybegynder
10. juni 1999 - 11:29 #2
Jeg mener hvis man fx. trykker på en knap.
Avatar billede fehaar Nybegynder
10. juni 1999 - 11:36 #3
Ah... Nu forstår jeg hvad du mener... Sorry. Det kunne misforstås.

Du bruger enten Win32 funktionen WinExec, eller den mere komplicerede CreateProcess. De kan findes i Win32 hjælpe-filen.

Eks.
if WinExec('c:\program.exe', SW_SHOW) > 0 then
  ProgrammetFejlede;
Avatar billede koder Nybegynder
10. juni 1999 - 12:41 #4
Tak for det.
Men kan du også sige mig en anden ting..
Jeg har 3 små programmer, og skal lave en menu, så man kan åbne dem fra  menuen!
Hvis nu jeg laver en "ListBox" (med de 3 programmer) og en knap (Kør)
Hvad skal jeg så skrive så man kan makerer programmet og derefter trykke "Kør"
Eller er der en anden måde at gøre det på?????
Håber også du kan hjælpe mig med det!!!!!!
Avatar billede fehaar Nybegynder
10. juni 1999 - 12:58 #5
Hvis du lagrer stien i listeboksen kan koden se således ud :

procedure TForm1.FormShow(Sender: TObject);
begin
  ListBox1.Add('c:\test.exe');
  ListBox1.Add('c:\test1.exe');
  ListBox1.Add('c:\test2.exe');
  ListBox1.Add('c:\test3.exe');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if ListBox1.ItemIndex > -1 then
    if WinExec(ListBox1.Items[ListBox1.ItemIndex], SW_SHOW) > 0 then
      ProgrammetFejlede;
end;

Hvis du vil bruge et kaldenavn i liset kan du lagre stien til programmet som et objekt i listens Objects metode og hente den derfra.
Avatar billede koder Nybegynder
10. juni 1999 - 13:42 #6
Det virker ikke!!!!
Avatar billede fehaar Nybegynder
10. juni 1999 - 13:55 #7
Ja, OK. Så gik det lidt hurtigt da jeg postede svaret. Her er en mere gennemført udgave. Denne gang har jeg afprøvet det :-P

procedure TForm1.FormShow(Sender: TObject);
begin
  ListBox1.Items.Add('c:\winnt\notepad.exe');
  ListBox1.Items.Add('c:\winnt\regedit.exe');
  ListBox1.Items.Add('c:\winnt\telnet.exe');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i : integer;

begin
  if ListBox1.ItemIndex > -1 then begin
    i := WinExec(PChar(ListBox1.Items[ListBox1.ItemIndex]), SW_SHOW);
    if i < 33 then
      ShowMessage(Format('Programstarten fejlede med kode : %d', [i]));
  end;
end;

Avatar billede koder Nybegynder
10. juni 1999 - 17:03 #8
Det virker heller ikke!!!!
jeg ved ikke om der er fordi vi ikke har den samme version af programmet,
jeg har Delphi 3 og 4.
men hvis du har prøvet det skulle det virke!!!
Så vis du gider at sende det til mig vil jeg blive MEGET glad, så kan jeg se om det er mig der har lavet en fejl!!!
min e-amil adresser:

koder@get2net.dk

Men ellers Mange tak for hjælpen ind til vidre!!!!!!!!!!!!!
Avatar billede koder Nybegynder
10. juni 1999 - 18:35 #9
MANGE Tak for det!!!!

Det var bare mig der havde skrevet det forkert, men nu virker det!!!!!
Jeg har lige et par spørgsmål til:
Kan man ikke give programmet i menuen et navn i stedet for ”C:\………”
Og hvis nu det skal på en cd-rom kan man ikke skrive noget andet end ”d:\……” for det er ikke alle altid et cd-rom drev har bogstavet d:

Man mange tak for hjælpen!!!!!!
Avatar billede fehaar Nybegynder
10. juni 1999 - 19:06 #10
Med hensyn til at give et andet navn i boksen, kan du gøre således :

unit Unit1;

interface

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

type
  TStringObject = class(TObject)
    private
      fValue : string;
    public
      constructor CreateAs(s : string);
    published
      property Value : string read fValue write fValue;
  end;

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

var
  Form1: TForm1;

implementation

{$R *.DFM}

constructor TStringObject.CreateAs(s : string);
begin
  Create;
  fValue := s;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  ListBox1.Items.AddObject('Notepad', TStringObject.CreateAs('c:\winnt\notepad.exe'));
  ListBox1.Items.AddObject('Registry Editor', TStringObject.CreateAs('c:\winnt\regedit.exe'));
  ListBox1.Items.AddObject('Telnet', TStringObject.CreateAs('c:\winnt\telnet.exe'));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i : integer;

begin
  if ListBox1.ItemIndex > -1 then begin
    i := WinExec(PChar((ListBox1.Items.Objects[ListBox1.ItemIndex] as TStringObject).Value), SW_SHOW);
    if i < 33 then
      ShowMessage(Format('Programstarten fejlede med kode : %d', [i]));
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
  i : integer;

begin
  for i := 0 to ListBox1.Items.Count - 1 do
    ListBox1.Items.Objects[i].Free;
end;

end.

Med hensyn til CD-ROM drev der kan skifte drevnavn begynder vi at have en hel anden affære... Der skal du nok finde ud af CD'ens drevbogstav først, og så bruge det. Lad evt. brugeren specificere det, eller gennemløb drevene med de to Win32 kald :
GetLogicalDriveStrings, for at få alle drev, og GetDriveType for at få drevets type.
Avatar billede januskh Nybegynder
11. juni 1999 - 11:13 #11
En som også kan anbefales er hvis du tilføjer "SHELLAPI" under "USES". Så kan du starte eksterne programmer fra dit delphi program på følgende måde.

shellexecute('C:\WINDOWS\NOTEPAD.EXE', '');
Avatar billede fehaar Nybegynder
11. juni 1999 - 13:26 #12
Det er ganske vist. Den bruger jeg dog mest til at starte programmer der bruger en fil. Man kan jo bede den om at 'eksekvere' en tekstfil, og man vil så få åbnet det program der er associeret til tekstfilen i windows.

Hvis man ved det er en EXE man startder er der dog mindre overhead ved at bruge WinExec (eller CreateProcess) end der er ved ShellExecute.
Avatar billede koder Nybegynder
11. juni 1999 - 15:32 #13
Tak for hjælpen!!!!!

Kan man også lave noget så hvis man markere et af programmerne på listen, så er der et billedet af programmet, og der står hvad det fylder, hvad det er for et program????
Avatar billede lrj Nybegynder
03. november 1999 - 20:42 #14
Ja, men det er jo et helt andet spørgsmål :)
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