Avatar billede speedy Nybegynder
22. februar 2002 - 16:30 Der er 5 kommentarer og
2 løsninger

Kun 1 program ad gangen.

Hej,

Jeg har lavet et program som har associeret nogle filtyper, og det vil sige at når man dobbeltklikker på denne filtype åbner mit program med filnavnet som parameter...

Mit problem er så at hvis mit program allerede kører i forvejen, så starter der jo et nyt program med den nye fil...

Jeg ville jo gerne have at hvis programmet allerede var startet skulle den bare åbne den nye fil i det allerede åbnede program.

Jeg har bare ikke lige en idé til hvordan man skulle gøre...

/SpEeDy
Avatar billede martinlind Nybegynder
22. februar 2002 - 16:35 #1
Nok noget med at finde ud af om det kører i forvejen og hvis det gør, få fat i handle og sende en user_message med et filnavn som parameter, findwindow() er der en api der hedder som du kan/skal bruge, sikkert flere...

/Martin
Avatar billede zerohero Nybegynder
22. februar 2002 - 16:51 #2
Prøv dette...

var
fAtom : TAtom;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
  { Searchs table to see if the program is already running }
  if GlobalFindAtom('PROGRAM_RUNNING') = 0 then
  { If not found then add it }
  fAtom := GlobalAddAtom('PROGRAM_RUNNING')
  else
  begin
    { If program is already running the show message and halt }
    MessageDlg('There is already an instance of this program running.',mtWarning, [mbOK], 0);
    Halt;
  end;
end;

procedure TfrmMain.FormDestroy(Sender: TObject);
begin
  GlobalDeleteAtom(fAtom);
end;


Held og Lykke

ZeroHero
Avatar billede speedy Nybegynder
22. februar 2002 - 17:36 #3
zerohero>>Jeps, det er lige sådan noget jeg kan bruge...tak!

martinlind>>Findwindow vil enten have class-name eller Window-name. Men hvad er Class-name og hvordan definerer man at mit program har et classname ? Desuden...hvordan laver man sine egne Messages som man kan sende ?

/SpEeDy
Avatar billede martinlind Nybegynder
22. februar 2002 - 18:21 #4
Lav en form med en memo og en knap og put denne kode ind så kan du lave din egen msg.

unit Unit1;

interface

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

const
  WM_MyMsg = wm_user + 55;

type
  TMyMsg = packed record
    Msg: Cardinal;
    Len: Integer;
    Text: PChar;
    Result: Longint;
  end;

  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure DoMyMsg( var Message : TMyMsg ); message WM_MyMsg;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
VAR
  M : TMyMsg;
begin
  M.Msg := WM_MyMsg;
  M.Text := 'Hest';
  M.Len := StrLen(M.Text);
  PostMessage(Handle,M.Msg,TMessage(M).WParam,TMessage(M).LParam);
end;

procedure TForm1.DoMyMsg(var Message: TMyMsg);
begin
  with Message do
  begin
      Memo1.Lines.Add(StrPas(Text));
  end;
end;

end.


/Martin
Avatar billede speedy Nybegynder
22. februar 2002 - 18:36 #5
Tak for hjælpen!

Der var lige den sidste ting jeg spurgte om med mit programs class-name ? Hvordan definerer jeg det ?

/SpEeDy
Avatar billede martinlind Nybegynder
22. februar 2002 - 18:39 #6
Jeg mener at kune huske at det er dit prg-navn du skal bruge, ved en test ville det være project1 eller også mainformens navn prøv lige project1 først.
Avatar billede speedy Nybegynder
22. februar 2002 - 18:47 #7
okay, jeg slog op i hjælpen (En god ting :)) og fandt ud af at hvis man satte sådan et atom-ting med GlobalAddAtom så kunne man som class-name i findwindow skrive det samme som man skrev med GlobalAddAtom.

Tak for hjælpen

/SpEeDy
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