Im FormCreate fehlt noch das Form.Init.
In der Kinoklasse ist alles Public. Das finde ich nicht gut.
Also bitte überlegen, welche Funktionen der Klasse von außen zugreifbar sein müssen, welche nur intern zu verwenden sind und das entsprechend "umverteilen".
Eher unprofessionelles Vorgehen:
Alles Privat machen und nur die vom Compiler bemängelten Sachen wieder nach Public verschieben, der Rest muss nicht von außen zu sehen sein.
Danach überlegen, was man vom Prozeduren bzw. Funktionen zu Eigenschaften (mit Getter und Setter) umzuwandeln könnte.
Da die meisten Meldungen bereits über Konstanten geregelt sind, die hier bitte auch noch:
showMessage('alle '+inttostr(PlGes)+' Karten verkauft!');
Allerdings: Ist es überhaupt sinnvoll, dass die Kinoklasse 'ne Meldung ausgibt?
Sollte man nicht lieber aus der Prozedure, die die Meldung ausgibt, eine Funktion machen und an der Stelle des Progammes, an der sie aufgerufen wird, den Rückgabewert abfragen und dort dann entsprechend reagieren?
Gehen wir davon aus, jemand möchte die Klasse nutzen, aber in einer anderen Sprache. Er muss so auch die Klasse ändern. Bei 'nem auswertbaren Rückgabewert kann er aber selbst mit 'ner eigenen Meldung reagieren.
Sprich: Muss nur den Inhalt der Konstanten im "Hauptprogramm" ändern und gut is.
Fortgeschritten: ResourceStrings verwenden.
Oder die Texte in 'ner INI-Datei ablegen und im Formular.Init einlesen. Dann kann man die Meldungen auch ändern, ohne das Programm neu kompilieren zu müssen.
Bei den Meldungen
showMessage(format(Verkaufsmeldung,[20,1,15,14]));
stehen rechts vier Zahlen, die man irgendwo auch in der Kinoklasse wiederfindet. Wie wäre es, wenn die Klasse ein paar Attribute bekommt, die diese Werte "liefern"?
Momentan muss man bei Änderungen an zwei Stellen: Die Meldungen und die Klasse.
Genug für's Erste, weitere Ideen eventuell später