AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Overload bei Funktion, beide Parameter sind Ganzzahl
Thema durchsuchen
Ansicht
Themen-Optionen

Overload bei Funktion, beide Parameter sind Ganzzahl

Ein Thema von mika · begonnen am 2. Sep 2005 · letzter Beitrag vom 2. Sep 2005
 
Benutzerbild von mika
mika

Registriert seit: 25. Okt 2002
176 Beiträge
 
Delphi 6 Professional
 
#9

Re: Override bei Funktion, beide Parameter sind Ganzzahl

  Alt 2. Sep 2005, 14:11
Ich poste mal kurz n bisschen mehr Code:

Delphi-Quellcode:
unit RunningPrograms;

interface

uses Contnrs, Windows, Messages;

Type
  TProgramInformations = class
    Handle: THandle;
    Caption: String;
  End;

  TRunningPrograms = class
    Constructor Create;
    Constructor Destroy;
    private
      oPrograms: TObjectlist;
      Function getIndexbyHandle(Handle: THandle): Integer;
    Public
      Function ReadToplevelPrograms: Boolean;
      Procedure AddProgram(Handle: THandle; Caption: String);
      Function DeleteProgram(Handle: THandle): Boolean; Overload;
      Function DeleteProgram(Index: Integer): Boolean; Overload;
      // Todo: per Override dem Entwickler nur eine Prozedur mit
      // beiden Parametern abieten
      Function getCaption(Handle: THandle): String; Overload;
      Function getCaption(Index: Integer): String; Overload;

      Function Count: Integer;
  end;

implementation

Constructor TRunningPrograms.Create;
begin
  If Not(Assigned(oPrograms)) then
    oPrograms := TObjectList.Create(True);
  oPrograms.Clear;
end;

Constructor TRunningPrograms.Destroy;
begin
  If Assigned(oPrograms) then
    oPrograms.Free;
  oPrograms := NIL;
end;

Function TRunningPrograms.getIndexbyHandle(Handle: THandle): Integer;
Var
  ndx: Integer;

Begin
  Result := -1;
  If Assigned(oPrograms) then
    for ndx := 0 to oPrograms.Count - 1 do
    begin
      If (oPrograms.Items[ndx] as TProgramInformations).Handle = Handle then
      Begin
        Result := ndx;
        Break;
      End;
    end;
End;

Function TRunningPrograms.ReadToplevelPrograms: Boolean;

  function GetWindows(const hWnd : THandle; LParam: LPARAM): LongBool; stdcall;
  var
    cLen: Longint;
    strCaption: String;

  begin
    Result := True;
    if (IsWindowVisible(hWnd)) and
       ((GetWindowLong(hWnd, GWL_HWndPARENT) = 0) or
       (GetWindowLong(hWnd, GWL_HWndPARENT) = GetDesktopWindow)) and
       (GetWindowLong(hWnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW = 0) then
    begin
      cLen := SendMessage(hWnd, WM_GETTEXTLENGTH, 0, 0);
      if cLen > 0 then
      begin
        SetLength(strCaption, cLen);
        SendMessage(hWnd, WM_GETTEXT, cLen + 1, Longint(Pchar(strCaption)));
        AddProgram(hWnd, strCaption);
      end;
    end;
    // mit Result = False kann die Callbackfunktion vorzeitig verlassen werden
  end;

Begin
  If Assigned(oPrograms) then
  begin
    EnumWindows(@GetWindows, 1);
    Result := True;
  end else
    Result := False;
End;

Procedure TRunningPrograms.AddProgram(Handle: THandle; Caption: String);
Begin
  If Assigned(oPrograms) then
  begin
    oPrograms.Add(TProgramInformations.Create);
    //(oPrograms.Last AS TProgramInformations).Handle := Handle;
    //(oPrograms.Last AS TProgramInformations).Caption := Caption;
  end;
End;

Function TRunningPrograms.DeleteProgram(Handle: THandle): Boolean;
Var
  ndx: Integer;

Begin
  ndx := getIndexbyHandle(Handle);
  If ndx >= 0 then
  begin
    Result := DeleteProgram(ndx);
  end else
    Result := False;
End;

Function TRunningPrograms.DeleteProgram(Index: Integer): Boolean;
Begin
  If oPrograms.Count - 1 >= Index then
  begin
    oPrograms.Delete(Index);
    Result := True;
  end else
    Result := False;
End;

Function TRunningPrograms.getCaption(Handle: THandle): String;
Begin
  Result := '';
  If Assigned(oPrograms) then
    If getIndexbyHandle(Handle) >= 0 then
      Result := getCaption(getIndexbyHandle(Handle));
End;

Function TRunningPrograms.getCaption(Index: Integer): String;
Begin
  Result := '';
  If Assigned(oPrograms) then
    IF oPrograms.Count - 1 >= Index then
      Result := (oPrograms.Items[Index] AS TProgramInformations).Caption;
End;

function TRunningPrograms.Count: Integer;
begin
  If Assigned(oPrograms) then
    Result := oPrograms.Count else
    Result := 0;
end;

end.

In der Funktion AddProgram bekomme ich eine Exception, wisst Ihr warum? Normalerweise müsste
das doch klappen wenn die Objektliste erzeugt ist oder? Hab schon öfter Objektlisten benutzt
und das hat eigentlich immer geklappt!

Hier mal mein Aufruf:

Delphi-Quellcode:
procedure TfrmMain.Button1Click(Sender: TObject);
Var
  myPrograms: TRunningPrograms;
  ndx: Integer;
  str: String;

begin
  myPrograms := TRunningPrograms.Create;
  If myPrograms.ReadToplevelPrograms then
  begin
    for ndx := 0 to myPrograms.Count - 1 do
    begin
      ListBox1.Items.Add(myPrograms.getCaption(ndx));
    end;
  end;
  myPrograms.Free;
end;
:: don't Panic ::
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz