Hallo,
ich bastel grad sowas wie
VoiceOverlay, das ist ein Programm was in Spielen die Namen derjenigen anzeigt, die im Teamspeak grade sprechen, nur das mein Programm das ganze auf dem Desktop anzeigt, da ich oft nebenbei noch im Internet surfe. Dank dem Beispielen die beim Teamspeak-Client dabei sind ist das auch nicht sonderlich schwer.
Also hab ich einen Timer in mein Programm gebaut der jede Sekunde prüft ob jemand spricht. Allerdings kann ich im Tastmanager sehen das das Programm jede Sekunde 4 Bytes mehr Speicher benutzt. Ich glaub das das an der Funktion liegt, die die Daten über den Benutzer ausliest. Hier mal meine Timer-Prozedur:
Delphi-Quellcode:
procedure TMainForm.PopupTimerTimer(Sender: TObject);
var
IDs :
Array[0..1023]
of Integer;
Records : Integer;
i: integer;
PopupForm: TPopupForm;
PlayerInfo: TtsrPlayerInfo;
begin
Records := 1024;
if tsrGetSpeakers( @IDs, @records) <> 0
then exit;
if Records > 0
then
for i :=0
to Records-1
do
begin
tsrGetPlayerInfoByID(IDs[i], @PlayerInfo);
//<-liest Bemutzerinfos aus
with TPopupForm.Create(Application)
do
begin
LName.Caption := PlayerInfo.NickName;
Top := round(Screen.DesktopHeight/2) - (19*(i + 1));
Left := Screen.DesktopWidth - 150;
FormStyle := fsStayOnTop;
Show;
end;
end;
end;
//Beschreibung von tsrGetPlayerInfoByID aus der Unit TsRemoteImport:
//##############################################################################
//#
//# Function tsrGetPlayerInfoByID( PlayerID: Integer;
//# tsrPlayerInfo : PtsrPlayerInfo): Integer;
//#
//# Description:
//# Get the Info on the player specified by PlayerID.
//#
//# Input:
//# PlayerID: The ID of the player you want the info from
//# tsrPlayerInfo: This is the pointer to a TtsrPlayerInfo record
//#
//# Output:
//# Result: 0 = OK, else the error number
//# if result = 0 then tsrPlayerInfo is filled with the player info.
//#
//##############################################################################
TtsrPlayerInfo ist ein packed record und sieht so aus:
Delphi-Quellcode:
TtsrPlayerInfo = packed record
PlayerID : Integer;
ChannelID : Integer;
NickName : Array [0..29] of Char;
PlayerChannelPrivileges : Integer;
PlayerPrivileges : Integer;
PlayerFlags : Integer;
end;
Wie kann ich verhindern das jede Sekunde neuer Speicher belegt wird?
Ich hoffe ihr könnt mir helfen.