Autor |
Beitrag |
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: 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
      
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: Sa 30.06.07 21:17
das musst du mir mal erklären? Er hat doch die function mit TProgramme deklariert: 5M17H hat folgendes geschrieben: | 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: Delphi-Quelltext 1: 2: 3: 4:
| TProgramme=Class public 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
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Sa 30.06.07 21:38
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
5M17H 
      
Beiträge: 164
XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
|
Verfasst: Sa 30.06.07 23:43
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))); weiter := Process32Next(aktFenster, aktProzess); end; CloseHandle(aktFenster); for I := 0 to ProzessListe.Count - 1 do begin anzeigen.lines.add(ProzessListe[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. |
und das geht nicht. Auchnicht mit TForm1 1: 2:
| if trim(Text) <> '' then Form1.memo2.lines.add(text); |
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 public 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
      
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: So 01.07.07 19:48
Mir scheint als hättest du keine Ahnung vom Erstellen von extra Dateitypen. Also:
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); destructor Destroy; procedure Erneuern; procedure Free; procedure Zeigen; function ProgrammnamenAusgeben(Wnd: THandle; LParam: LongInt): Boolean; stdcall; end;
implementation
uses SysUtils, Windows, prozessdoku;
constructor TProgramme.Create(anzeigen11, anzeigen12 : TMemo); begin inherited Create; ProzessListe := TStringList.Create; ProgrammListe := TStringList.Create; anzeigen:=anzeigen11; anzeigen2:=anzeigen12; Erneuern; end;
destructor TProgramme.Destroy; begin inherited Destroy; ProzessListe.Free; end;
procedure TProgramme.Free; begin if self<>nil then 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))); weiter := Process32Next(aktFenster, aktProzess); end; CloseHandle(aktFenster); for I := 0 to ProzessListe.Count - 1 do begin anzeigen.lines.add(ProzessListe[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; 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.
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; public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin Programme.Zeigen; end;
procedure TForm1.FormCreate(Sender: TObject); begin Programme:=TProgramme.Create(Memo1,Memo2); Timer1.Enabled := True; Timer1.Interval := 15000; Timer1Timer(Sender); end;
procedure TForm1.FormDestroy(Sender: TObject); begin Programme.Free; 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 
      
Beiträge: 164
XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
|
Verfasst: 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
      
Beiträge: 417
Erhaltene Danke: 2
XP
FPC mit Lazarus
|
Verfasst: So 01.07.07 20:32
5M17H 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 
      
Beiträge: 164
XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
|
Verfasst: Mo 02.07.07 15:40
|
|
Regan
      
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: Mo 02.07.07 17:33
Neue Frage:= Neues Thread.
|
|
5M17H 
      
Beiträge: 164
XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
|
Verfasst: Mo 02.07.07 17:52
Geht ums gleiche Thema... "Programmlaufzeit Dokumentieren" und das gehört wohl dazu 
|
|
Regan
      
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: 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 
      
Beiträge: 164
XP, Vista32, bald auch Vista64
PHP(3/5), Delphi(2), Java(1), C(3), C#(1)
|
Verfasst: Mo 02.07.07 18:23
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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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.
|
|