Also ich sage mal ganz blauäugig: Mit GetNamePath kommst du schon mal gar nicht weiter. Ich habe eine ähnliche Funktion hier in meinem Projekt, die ich mal etwas umgeschrieben und kommentiert habe. Ich sollte noch anmerken, dass das Ganze für Delphi .net ist und für reines Delphi w32 evtl. die Methodenparameter angepasst werden müssen.
Code:
procedure TIrgendeineKlasse.GetAvailableFiles(pComboBox: TComboBox);
var
lDir: String; // Startverzeichnis für die Filesuche
lSearchRecord: TSearchRec; // zum Suchen selbst
begin
// Wenn ich schon nach den verfügbaren Dateien suche, dann will ich aber
// keine doppelten Einträge von vorherigen Dateisuchen
pCombobox.Clear;
// Ich suche nur im gleichen Verzeichnis, in dem auch die EXE meines
// Programms läuft
lDir := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName));
// Existiert überhaupt irgendeine Datei im gewünschten Format?
// (hier eine EXE-Datei).
if FindFirst(lDir + '*.exe', faAnyFile, lSearchRecord) = 0 then
begin
repeat
if (lSearchRecord.Attr <> faDirectory) then
pComboBox.Items.Add(lSearchRecord.Name);
until FindNext(lSearchRecord) <> 0;
// Suche abschliessen
FindClose(lSearchRecord);
end;
end;
Aber jetzt kommt es natürlich vollkommen darauf an,
wann die Methode aufgerufen wird. Du willst ja, dass sich die Combobox quasi "von selbst" aktualisiert. Aber dieses "von selbst" sollte schon etwas genauer bestimmt sein.
Eine Möglichkeit ist, die Application.OnIdle zu überschreiben (Suchworte: +Delphi +OnIdle) und innerhalb der neuen OnIdle die Methode auszuführen. Dann würde deine Combobox immer dann aktualisiert werden, wenn dein Programm gerade nichts zu tun hat. Klassischesr Einsatz: Aktualisierung eines Statusbars.
Alternativ (wenn die Aktualisierung deiner ComboBox wirklich
richtig dringend und wichtig ist) lassen sich auch speziell für diesen Task Resourcen verbraten und ein Timer einsetzen. (Suchworte: +Delphi +TTimer). Einfach obige Routine in die Ereignismethode des Timers packen und schon kannst du bestimmen wann und wo nach neuen Methoden gesucht wird.
Klassischer Einsatz: Timer zum automatischen Logout nach einer gewissen Inaktivität bei einem Usermanagement.
Als weitere Möglichkeit fiele mir noch die OnDraw-Methode des der ComboBox übergeordneten Formulars ein. Da ist aber u.U. ein bißchen Gebastel notwendig, damit es zu keiner Null Pointer-Exveption kommt (Create, FreeAndNil).
Klassischer Einsatz: Alles mögliche, was auf dem Formular angezeigt wird. Ist fast so etwas wie eine Standard-Refresh-Art.
Ich persönlich würde in diesem Falle wohl die OnIdle-Methode verwenden.