Autor Beitrag
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Sa 30.06.07 21:11 
ich kann ne funktion/prozedure deklarieren ohne T?

hmm..sag mal wasn heut los..hab ihr euch heut alle verschworen..wir lassen stefan noch was lernen? :)

_________________
Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Sa 30.06.07 21:17 
das musst du mir mal erklären?
Er hat doch die function mit TProgramme deklariert:
user profile icon5M17H hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
function TProgramme.ProgrammnamenAusgeben(Wnd: THandle;
  LParam: Integer): Boolean;
var Rueck : Boolean;

So Inzwischen ist es in der klasse TProgramme.
Bringt auchnihts. "Form1.irgendwas.und.egalwas" geht immernoch nicht... 'Nicht deklarierter bezeichner'

Und oben wird er die so deklariert haben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
TProgramme=Class //oder ähnlich
{...}
public //ganz wichtig, sonst kannst du nicht darauf zugreifen (fehler auch im anderen threat berichtigt)
   function ProgrammnamenAusgeben(Wnd: THandle; LParam: LongInt): Boolean;

Nur ruft er die Form1 auf. Vielleicht heißt die Form1 gar nicht Form1, weil er sie in Programme umbenannt hat. Vielleicht hat er auch gar keine Form1 und nur eine .pas-datei, dann brauch er einen Constructor und einen Destructor (nicht unbedingt). Vielleicht hat er auch einfach die .pas-datei nicht in die uses reingschrieben, aber dann würde es delphi automatisch hinzufügen.
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Sa 30.06.07 21:38 
user profile iconRegan hat folgendes geschrieben:
das musst du mir mal erklären?
Er hat doch die function mit TProgramme deklariert:
user profile icon5M17H hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
function TProgramme.ProgrammnamenAusgeben(Wnd: THandle;
  LParam: Integer): Boolean;
var Rueck : Boolean;

So Inzwischen ist es in der klasse TProgramme.
Bringt auchnihts. "Form1.irgendwas.und.egalwas" geht immernoch nicht... 'Nicht deklarierter bezeichner'

Und oben wird er die so deklariert haben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
TProgramme=Class //oder ähnlich
{...}
public //ganz wichtig, sonst kannst du nicht darauf zugreifen (fehler auch im anderen threat berichtigt)
   function ProgrammnamenAusgeben(Wnd: THandle; LParam: LongInt): Boolean;

Nur ruft er die Form1 auf. Vielleicht heißt die Form1 gar nicht Form1, weil er sie in Programme umbenannt hat. Vielleicht hat er auch gar keine Form1 und nur eine .pas-datei, dann brauch er einen Constructor und einen Destructor (nicht unbedingt). Vielleicht hat er auch einfach die .pas-datei nicht in die uses reingschrieben, aber dann würde es delphi automatisch hinzufügen.


mein Kommentar war positiv gemeint :)

_________________
Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
5M17H Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: Sa 30.06.07 23:43 
ausblenden volle Höhe Programme_Auflisten.pas
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
unit programme_auflisten;

interface

uses TlHelp32, Classes, StdCtrls;

type
  TProgramme = class(TObject)
    private
      ProzessListe : TStringList;
      ProgrammListe : TStringList;
    public
      constructor Anlegen(anzeigen, anzeigen2 : TMemo);
      destructor Aufloesen;
      procedure Erneuern(anzeigen, anzeigen2 : TMemo);
      function ProgrammnamenAusgeben(Wnd: THandle; LParam: LongInt): Boolean; stdcall;
  end;

implementation

uses
  SysUtils, Windows;

constructor TProgramme.Anlegen(anzeigen, anzeigen2 : TMemo);
begin
  ProzessListe := TStringList.Create;
  ProgrammListe := TStringList.Create;
  Erneuern(anzeigen, anzeigen2);
end;

destructor TProgramme.Aufloesen;
begin
  ProzessListe.Free;
end;

procedure TProgramme.Erneuern(anzeigen, anzeigen2 : TMemo);
var weiter : boolean;
    aktFenster : THandle;
    aktProzess : TProcessEntry32;
    i: Integer;
begin
  ProzessListe.Clear;
  aktFenster := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  aktProzess.dwSize := SizeOf(TProcessEntry32);
  weiter := Process32First(aktFenster, aktProzess);
  while weiter = true do
  begin
    ProzessListe.Add(String(ExtractFileName(aktProzess.szExeFile)));
//    ProgrammListe.Add(ProgrammnamenAusgeben(aktFenster));
    weiter := Process32Next(aktFenster, aktProzess);
  end;
  CloseHandle(aktFenster);
  for I := 0 to ProzessListe.Count - 1 do
  begin
    anzeigen.lines.add(ProzessListe[i]);
//    anzeigen2.lines.add(ProgrammListe[i]);
  end;
end;

function TProgramme.ProgrammnamenAusgeben(Wnd: THandle;
  LParam: Integer): Boolean;
var Rueck : Boolean;
    Laenge : Integer;
    Text : String;
begin
  Rueck := true;
  laenge := GetWindowTextLength(Wnd);
  SetLength(Text, laenge);
  GetWindowText(Wnd, PChar(Text), laenge+1);
  if trim(Text) <> '' then
    Form1.memo2.lines.add(text);
  result := rueck;
end;


end.


ausblenden und das geht nicht. Auchnicht mit TForm1
1:
2:
if trim(Text) <> '' then
    Form1.memo2.lines.add(text);

ausblenden volle Höhe Prozessdoku.pas (Mit Form)
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
unit prozessdoku;

interface

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

type

  TForm1 = class(TForm)
    TrayIcon1: TTrayIcon;
    ApplicationEvents1: TApplicationEvents;
    Memo1: TMemo;
    Timer1: TTimer;
    Memo2: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Enabled := True;
  Timer1.Interval := 15000;
  Timer1Timer(Sender);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var i, FensterName : integer;
begin
  EnumWindows(@TProgramme.ProgrammnamenAusgeben, 0);
end;

end.


[edit]
Es geht aucnicht wenn ich die prozessdoku.pas bei der programme_auflisten.pas einbinde.
'Zirkuläre Unit Referenc'
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: So 01.07.07 19:48 
Mir scheint als hättest du keine Ahnung vom Erstellen von extra Dateitypen. Also:
ausblenden volle Höhe Programme_auflosten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
unit programme_auflisten;

interface

uses TlHelp32, Classes, StdCtrls;

type
  TProgramme = class(TObject)
    private
      ProzessListe : TStringList;
      ProgrammListe : TStringList;
      anzeigen:TMemo;
      anzeigen2:TMemo;
    public
      constructor Create(anzeigen11, anzeigen12 : TMemo); //Geändert
      destructor Destroy;               //Geändert
      procedure Erneuern;               //Geändert, nicht merh nötig.
      procedure Free;                 //Hinzugefügt
      procedure Zeigen;                //hinzugefügt
      function ProgrammnamenAusgeben(Wnd: THandle; LParam: LongInt): Boolean; stdcall;
  end;

implementation

uses
  SysUtils, Windows, prozessdoku;

constructor TProgramme.Create(anzeigen11, anzeigen12 : TMemo);     //Geändert
begin
inherited Create;
  ProzessListe := TStringList.Create;
  ProgrammListe := TStringList.Create;
  anzeigen:=anzeigen11;             //Hinzugefügt, jetzt global verwendbar
  anzeigen2:=anzeigen12;            
  Erneuern;                        //Geändert
end;

destructor TProgramme.Destroy;       //in destroy, wenn TProgramme.Destroy und existiert nicht mehr, dann fehler
begin
inherited Destroy;
  ProzessListe.Free;
end;

procedure TProgramme.Free;           //Free-Prozedur
begin
  if self<>nil then          //Wenn TPRogramme existiert, dann erst zerstören, sonst nicht 
  Destroy;
end;

procedure TProgramme.Erneuern;
var weiter : boolean;
    aktFenster : THandle;
    aktProzess : TProcessEntry32;
    i: Integer;
begin
  ProzessListe.Clear;
  aktFenster := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  aktProzess.dwSize := SizeOf(TProcessEntry32);
  weiter := Process32First(aktFenster, aktProzess);
  while weiter = true do
  begin
    ProzessListe.Add(String(ExtractFileName(aktProzess.szExeFile)));
//    ProgrammListe.Add(ProgrammnamenAusgeben(aktFenster));
    weiter := Process32Next(aktFenster, aktProzess);
  end;
  CloseHandle(aktFenster);
  for I := 0 to ProzessListe.Count - 1 do
  begin
    anzeigen.lines.add(ProzessListe[i]);
//    anzeigen2.lines.add(ProgrammListe[i]);  
  end;
end;

function TProgramme.ProgrammnamenAusgeben(Wnd: THandle;
  LParam: Integer): Boolean;
var Rueck : Boolean;
    Laenge : Integer;
    Text : String;
begin
  Rueck := true; 
  laenge := GetWindowTextLength(Wnd);
  SetLength(Text, laenge);
  GetWindowText(Wnd, PChar(Text), laenge+1);
  if trim(Text) <> '' then
  begin
  anzeigen2.lines.add(text);       
  end;
  result := rueck;
end;

procedure TProgramme.Zeigen;  //TestProzedur, zum Ausprobieren :-)
begin
  anzeigen.Lines.Add('Hallo');
  anzeigen2.Lines.Add('Fritz');
end;



end.

Im folgenden habe ich das TrayIcon und die Application Events entfernt und eine Button hinzugefügt.
ausblenden volle Höhe prozessdoku
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
unit prozessdoku;

interface

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

type

  TForm1 = class(TForm)
    Memo1: TMemo;
    Timer1: TTimer;
    Memo2: TMemo;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);

  private
      Programme:TProgramme;       //Typ von prozesse_auflisten
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject); //Button Prozedur
begin
Programme.Zeigen;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Programme:=TProgramme.Create(Memo1,Memo2);      //erstellt Typ. Wichtig: davor erstellen sonst fehler bei Timer1Timer
  Timer1.Enabled := True;
  Timer1.Interval := 15000;
  Timer1Timer(Sender);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Programme.Free; //Speicher Freigeben
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var i, FensterName : integer;
begin
  EnumWindows(@TProgramme.ProgrammnamenAusgeben, 0);
end;

end.

So sollte das eigentlich funktionieren.

OffTopic: Wirst du das Programm auch zum Download anbieten?
5M17H Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: So 01.07.07 20:28 
Ja auf jeden fall. Ich werde wohl ne weile brauchen.. Und ich hoffe ich werde in den nächsten 2 Wochen fertig, denn am 15 gehts für 4 we nach England dann 1tag zu Hause und noch eine Woche weg... Soll heißen. In dieser Zeit kann ich NICHTS machen... ;-)

Ahso morgen werde ich testen ob alles klappt.. Danke für deinen Post.
rizla
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 417
Erhaltene Danke: 2

XP
FPC mit Lazarus
BeitragVerfasst: So 01.07.07 20:32 
user profile icon5M17H hat folgendes geschrieben:
Ich werde wohl ne weile brauchen.. Und ich hoffe ich werde in den nächsten 2 Wochen fertig


du musst dein blog dann noch mal anpassen.
wegen der zeit, zu der du fertig sein willst ;)

:r:

_________________
if you have what they want - they'll find a way to take it (bruce sterling)
WOW - 10 JAHRE Mitglied beim Delphi-Forum. Wie die Zeit vergeht, Freunde.
5M17H Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: Mo 02.07.07 15:40 
ausblenden Programm Titel ausgeben
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
function TProgramme.ProgrammnamenAusgeben(Wnd: THandle;  LParam: Integer): Boolean;
var Laenge : Integer;
    Text : String;
    rueck: boolean;
begin
  Rueck := true;
  laenge := GetWindowTextLength(Wnd);
  SetLength(Text, laenge);
  GetWindowText(Wnd, PChar(Text), laenge+1);
  if trim(Text) <> '' then
    form1.memo2.lines.add(text);
  result := rueck;
end;


ausblenden Auslöser
1:
2:
3:
4:
5:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  TProgramme.Anlegen(memo1);
  EnumWindows(@TProgramme.ProgrammnamenAusgeben,0);
end;


Leider geht 'TProgramme.ProgrammnamenAusgeben' inner das gleiche durch, wnd is quasi immer der gleiche wert und erfüllt nicht die bedingung im if. So bekomme ich nie was ins Memo2.
Ahso diese Funktion habe ich mit mienem Lehrer ausgearbeitet... Also ist sie an sich richtig, nur wie bestimme ich wnd?
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Mo 02.07.07 17:33 
Neue Frage:= Neues Thread.
5M17H Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: Mo 02.07.07 17:52 
Geht ums gleiche Thema... "Programmlaufzeit Dokumentieren" und das gehört wohl dazu ;-)
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Mo 02.07.07 18:11 
Wie mans nimmt. B2T: Ich weiß zwar nichtm warum du an wnd kommen willst. Ich in meinem Programm überprüfe mit einem Timer einfach nur ob eine exe läuft und wenn ja dann erhöhe ich den zähler um eins. warum willst du noch wnd haben?
5M17H Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 164

XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
BeitragVerfasst: Mo 02.07.07 18:23 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
function TProgramme.ProgrammnamenAusgeben(Wnd: THandle;  LParam: Integer): Boolean;
var Laenge : Integer;
    Text : String;
    rueck: boolean;
begin
  Rueck := true;
  laenge := GetWindowTextLength(Wnd);
  SetLength(Text, laenge);
  GetWindowText(Wnd, PChar(Text), laenge+1);
  if trim(Text) <> '' then
    form1.memo2.lines.add(text);
  result := rueck;
end;

Das erhöht keinen zähler oder? Diese Funktion soll in ein Memo alle Fenstertitel schreiben.. Also muss ich wnd übergeben, weil mit dem 'aktuellen' wert von memo kann er nichts anzeigen, und der wert wnd verändert sich nie.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 02.07.07 18:59 
Nicht alles, was mit Deinem Programm zu tun hat, gehört in einen Thread. Beim Schreiben eines Programmes begegnet man verschiedenen Problemen - und die gehören dann auch in verschiedene Threads -> geschlossen.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Dieses Thema ist gesperrt, Du kannst keine Beiträge editieren oder beantworten.

Das Thema wurde von einem Team-Mitglied geschlossen. Wenn du mit der Schließung des Themas nicht einverstanden bist, kontaktiere bitte das Team.