Hm, also erstmal meine übliche Kritik was Codestil angeht, du solltest dir die Konvention etwas näher anschauen. Ich weiß, es ist noch kein großes Programm und glaub mir ich war Jahrelang noch viel schlimmer unterwegs, aber guter Code hat weniger Fehler (wirklicher Fakt) und man findet sie auch leichter. Rück ein wenig mehr ein, benutz self und beachte ein paar der anderen Regeln, denn je eher man damit anfängt desto besser ist es, aber das ist nur ein Tipp!
Was deinen Code angeht, so solltest du erstmal schauen, was für Rückgabewerte einzelne Funktionen haben. So gibt dir ein SaveDialog (auch ein OpenDialog) ein Boolean zurück. Ist diese Rückgabe wahr, wurde ok gedrückt, sonst abgebrochen.
Für dein ZipForge setzt du ein BaseDir (Basis
Verzeichnis), du öffnest aber bestimmte Files. Also bleibt dein Zip einfach leer, weil dein Verzeichnis ungültig ist (eine Datei ist einfach kein Verzeichnis). Um jetzt das ganze Verzeichnis zu packen, indem sich deine Datei befindet solltest du also unbedingt einen anderen Dialog verwenden (so dass auch die Auswahl von Verzeichnissen und nur eben nur diesen möglich ist).
Allerdings hast du dann natürlich auch das Problem, dass du mit der aktuellen Filtermaske direkt ein ganzes Verzeichnis (alle Datein + Ordner) packst.
Möchtest du hingegen wirklich nur die ausgewählten Dateien packen, wirst du um AddFromStream nicht rumkommen (dazu schaust du dir am Besten mal die TFileStreams an (findest du auch viel Hilfe in der
DP).
Dann solltest du aber in deinem OpenDialog auch noch Multiselect erlauben.