Hi burn,
komisch, ich will dich ja nicht unnötig strapazieren martin,
ne, da mach Dir mal keine Gedanken drüber . Wenn ich keine Lust hätte, hier jemandem zu helfen, dann würde ich es einfach von vornherein bleiben lassen, wa?
aber jetzt bekomme ich die fehlermeldung „Inkompatible Typen
FileCtrl.TTextCase und DirOutln.TTextCase“
Aha. Aaaaalso: In Deinem Projekt sind sowohl die Unit „FileCtrl“ (darin ist unter anderem die TDriveComboBox-Klasse implementiert) als auch die Unit „DirOutln“ eingebunden. Und jetzt kommt’s: Beide Units enthalten an irgendeiner Stelle die Definition eines Typs mit demselben Namen „TTextCase“. In der Unit „FileCtrls“ sieht er so aus:
TTextCase = (tcLowerCase, tcUpperCase),
aber in der Unit „DirOutln“ ist der Typ „TextCase“ anders definiert (keine Ahnung, wie; ich ich kenne diese Unit nicht).
Wenn Du nun in Deinem Code einfach „TTextCase“ hinschreibst, dann wird’s für den Compiler zweideutig. Zu diesem Zeitpunkt erscheint aber noch keine Fehlermeldung, sondern der Compiler sucht sich einfach eine der Units aus und sagt: „So, dieses „TTextCase“ ist für mich jetzt einfach dasjenige aus dieser Unit!“ (Frag mich bitte nicht, nach welchem Kriterium er seine Wahl trifft – ich habe keine Ahnung). Wenn er nun aber die „falsche“ Unit erwischt hat, dann kommt die Fehlermeldung „Inkompatible Typen“. Im Fachjargon spricht man in so einem Fall übrigens davon, daß sich „Scopes überschneiden“ („Scope“ = „Gültigkeitsbereich“, hier solche von Typdefinitionen).
Die Lösung ist extrem simpel. Alles was Du tun mußt, ist, den entsprechenden Typen den Namen der „Bezugs-Unit“ mit einem Trenn-Punkt voranzustellen. Damit „zwingst“ Du den Compiler, die entsprechende Unit zu referenzieren.
Also: Da Du dem Compiler die Unit „FileCtrl“ aufzwingen mußt, erweiterst Du „TTextCase“ zu „FileCtrl.TTextCase“,
„tcUpperCase“ zu „FileCtrl.tcUpperCase“ sowie „tcLowerCase“ zu
„FileCtrl.tcLowerCase“.
Mit freundlichem Gruß
Martin