No sam spójrz na definicję części publicznej klasy THttpThread:
THTTPGetThread = class(TThread)
private
{....}
public
constructor Create(aAcceptTypes, aAgent, aURL, aFileName, aUserName, aPassword, aPostQuery, aReferer: String;
aBinaryData, aUseCache: Boolean; aProgress: TOnProgressEvent; aToFile: Boolean);
end;
Tam faktycznie nie ma żadnej właściwości identyfikującej wątek.
Pokażę Ci jak to by wyglądało przy grzebaniu w kodzie (HTTPGet nie ma żadnych metod wirtualnych, więc dziedziczenie odpada, i tak musiałbyś zmieniać kod "główny" komponentu):
należy zrobić miejsce na zapamiętanie numeru komponentu tworzącego HttpThread
Należy dodać do metody Create jakiś parametr, np aComponentNo:
constructor Create(aAcceptTypes, aAgent, aURL, aFileName, aUserName, aPassword, aPostQuery, aReferer: String;
aBinaryData, aUseCache: Boolean; aProgress: TOnProgressEvent; aToFile: Boolean; aComponentNo: integer = 0 );
(Dodanie dodatkowego parametru na końcu i zrobienie defaulta na 0 spowoduje że nie będzie wrzasków kompilatora gdybyś łączył to z kodem z innego źródła)
W ciele konstruktora zapamiętać go - np w prywatnej właściwości FComponentNo.
FComponentNo:= aComponentNo;
Tę właściwość należy oczywiście opublikować w sekcji public
property ComponentNo: integer read FComponentNo write FComponentNo;
(ja bym dał nawet read-only na wszelki wypadek :), czyli bez write)
I wreszcie - należy przerobić sam komponent HttpGet:
procedure THTTPGet.GetFile;
var
Msg: TMsg;
begin
{...}
FThread := THTTPGetThread.Create(FAcceptTypes, FAgent, FURL, FFileName, FUserName, FPassword, FPostQuery, FReferer,
FBinaryData, FUseCache, FProgress, True, Self.Tag);
{...}
end;
I już masz (Sender as THTTPGetThread).Tag jako identyfikator :)
Oczywiście metod rozgrzebania tego kodu jest kilka - można do konstruktora wątku dodać np FOwner: TComponent. a metodę OnProgress wywoływać nie poprzez:
FTProgress(Self, FTFileSize, BytesReaded);
tylko
FTProgress(Self.FOwner, FTFileSize, BytesReaded);
itede. Powodzenia :)