Avatar billede xob Nybegynder
14. marts 2004 - 21:46 Der er 9 kommentarer og
1 løsning

Hvordan for jeg den til at tjekke..

Hvordan for jeg den til at tjekke om en fil existere på den rigtige plad og vis den ikk gør så skrive en besked og lukke programmet bagefter..

If FileExist('C:\WINDOWS\???.dll') then
else ShowMessage('ERROR'); ??????? close;
Avatar billede athlon-pascal Juniormester
14. marts 2004 - 21:49 #1
If not FileExists('C:\WINDOWS\???.dll') then
begin
  ShowMessage('ERROR');
  Close;
end;
Avatar billede athlon-pascal Juniormester
14. marts 2004 - 21:49 #2
Det var et svar :o)
Avatar billede xob Nybegynder
14. marts 2004 - 22:20 #3
Kan ikk få det til at virke.. Hvor er det lige præcist jeg skal sætte det ind henne?
Avatar billede athlon-pascal Juniormester
14. marts 2004 - 22:21 #4
Sæt det f.eks. ind i din mainforms OnCreate :o)
Avatar billede xob Nybegynder
14. marts 2004 - 22:42 #5
Hvordan gør man det helt præcist.. Er lidt af en noob til delphi endnu!
Avatar billede hrc Mester
15. marts 2004 - 01:13 #6
Klik med musen på din form. Til højre på skærmen skifter din "Object inspector" til at vise properties og events for denne (form-klassen).

Klik på "Events" i inspectoren og find OnCreate linien. Dobbeltklik i feltet t.h. og du har en plads til at fylde athlon-pascals kode ind (man skal i øvrigt ikke bruge Athlon'er - de bruger 33% mere strøm end P4'erne ;-)).

Du skal bruge PostQuitMessage(0) i stedet for Close, hvis du placerer koden i OnCreate eventen:

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  if not FileExists('aFile.Dll') then begin
    MessageDlg('Naaah', mtError, [mbOK], 0);
    PostQuitMessage(0);
  end; // if
end;
Avatar billede nidyahou Praktikant
15. marts 2004 - 12:45 #7
et lille tillægs spørgsmål > kan man tjekke om en process kører?
Avatar billede hrc Mester
16. marts 2004 - 13:29 #8
Tænker du på at forhindre dit eget program i starte mere end een gang, eller vil du holde øje med andre programmer?
Avatar billede xob Nybegynder
16. marts 2004 - 14:19 #9
Det er ment som at den skal tjekke om en anden fil existere og vis ikk afslutte (fordi uden den fil fucker den helt ud.. og man skal genstarte.. derfor.. bare for en sikkerheds skyld til brugerene!!)
Avatar billede hrc Mester
16. marts 2004 - 16:44 #10
procedure TfrmMain.btnFetchClick(Sender: TObject);
var
  hWndCurWin, hWndDesk: HWnd;
  ThisHandle : TWindowClass;
begin
  hWndDesk:= GetDesktopWindow; // This ist the parent of alle top-level windows
  if hWndDesk = 0 then
    exit;

  hWndCurWin := GetWindow(hWndDesk,GW_CHILD);

  lbWindows.Items.BeginUpdate;
  try
    lbWindows.Clear;

    while (hWndCurWin <> 0) do begin
      ThisHandle := TWindowClass.Create(hWndCurWin);
      if ThisHandle.IsValid(self.Handle) then
        lbWindows.Items.AddObject(ThisHandle.Name,ThisHandle)
      else
        ThisHandle.Free; // Was a dud - erase again

      // MSDN advise use of EnumChildWindows
      hWndCurWin := GetWindow(hWndCurWin,GW_HWNDNEXT);
    end;
  finally
    lbWindows.Items.EndUpdate;
  end; // try
end;

Min TWindowClass set sådan herr ud - og den er ikke færdig (eller køn for den sags skyld):

const
  StLgd = 255;

type
  TWindowClass = class // Mangler at hente programmets ikon frem
  private
    fHandle : HWND;
    fName : string;
  public
    constructor Create(aHandle : HWND);
    destructor Destroy; override;
    procedure Draw(aCanvas : TCanvas; aRect : TRect);
    property Handle : HWND read fHandle;
    property Name : string read fName;
    function IsVisible : boolean;
    function HasParent : boolean;
    function IsToolWindow : boolean;
    function IsMe(aHandle : HWND) : boolean;

    // Not a toolwindow nor is it me, it is visible, and has no parents.
    function IsValid(const aThisForm : HWND) : boolean;
  end;

implementation

constructor TWindowClass.Create(aHandle: HWND);
var
  szWinText : pchar;
begin
  inherited Create;
  fHandle := aHandle;

  getmem(szWinText,StLgd+1);
  try
    GetWindowText(fHandle, szWinText,StLgd);
    fName := string(szWinText);
  finally
    freemem(szWinText,StLgd+1);
  end; // try
end;

destructor TWindowClass.Destroy;
begin
  try
  finally
    inherited;
  end; // try
end;

procedure TWindowClass.Draw(aCanvas: TCanvas; aRect : TRect);
begin
  aCanvas.TextRect(aRect,aRect.Left+32,aRect.Top+2,fName);
end;

function TWindowClass.HasParent: boolean;
begin
  result := (GetParent(fHandle) <> 0);
end;

function TWindowClass.IsMe(aHandle: HWND): boolean;
begin
  result := fHandle = aHandle;
end;

function TWindowClass.IsToolWindow: boolean;
begin
  result := ((GetWindowLong(fHandle, GWL_EXSTYLE) and WS_EX_TOOLWINDOW) <> 0);
end;

function TWindowClass.IsValid(const aThisForm : HWND) : boolean;
begin
  result := not (HasParent or IsToolWindow or not IsVisible or IsMe(aThisForm));
end;

function TWindowClass.IsVisible: boolean;
begin
  result := IsWindowVisible(fHandle);
end;

Erstat lbWindows med en TStringList og du er klar til at lede efter programmet. Utrolig hvad du får for 0 points ;-)
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