![]() |
published set > 32bit
Hallo,
obwohl das Thema sicherlich nicht allzu neu ist, finde ich bei Google doch nur Junk dazu, der mir nicht weiterhilft. Ich möchte die Eigenschaft
Delphi-Quellcode:
gerne published machen. Da mein set zu groß ist, geht das nicht. Grund: Die Standard-Streaming-Methoden, die für published-Elemente verwendet werden, kommen nur mit Sets bis max. 32bit zurande. Mehr macht auch keinen Sinn, wenn man den Standard-Property-Editor verwendet. Ich möchte aber sowieso einen eigenen Dialog Property Editor dafür bauen und würde auch eigene Routinen zum Schreiben und Lesen der Eigenschaften schreiben (mit TPersistent.DefineProperties), aber die Absicht alleine hält ja Delphi noch lange nicht von diesem Fehler ab...
TKeySet = set of Char;
property AllowedKeys: TKeySet read FAllowedKeys write FAllowedKeys; Unter den von mir genannten Voraussetzungen sehe ich nun keinen Grund mehr für den Compilerfehler. Kann man den irgendwie abstellen? Wie würdet ihr an dieses Problem herangehen? |
Re: published set > 32bit
Der Grund ist, daß die Verwaltungs- und Streamingmethoden für die Publisched-Dinge nunmal nur mit Integer arbeiten und mit allem, was da irgendwie reinpaßt. (inklusive Typen mit internen Zeigern, wie Strings und Co.)
Dü könntest dein SET aber in einer Klasse kapseln. |
Re: published set > 32bit
Eine eigene Klasse ist schon irgendwie mit Kanonen auf Spatzen schießen, zumal ein Set eben so schön handlebar ist mit dem in-Operator usw., aber wenn man die Standard Verwaltungs- und Streamingmethoden nicht anders aushebeln kann... Ich dachte es gäbe vielleicht eine Vorgehensweise ähnlich DefineProperties, für mein TKeySet speziell eigene Read- und Write-Methoden zu setzen, die den Standardmethoden zuvorkommen. Dann wäre das Problem ja schon gelöst. Aber dann müsste diese Vorgehensweise natürlich auch sicherstellen, dass ich einen eigenen Property Editor registriere... ist sicher so nicht lösbar. Dann werd ich mich wohl morgen mal an die Klasse machen.
|
Re: published set > 32bit
Wenn ich dich recht verstanden habe, musst du AllowedKeys einfach public statt published machen. Gestreamt wird's ja eh wegen DefineProperties.
|
Re: published set > 32bit
Zitat:
|
Re: published set > 32bit
Als public wär das kein Problem, aber dann wirds ja auch nicht im OI angezeigt ;-)
Das Problem ist, dass (zumindest in D5) TSetProperty von TOrdinalProperty abgeleitet ist und dieses mit GetOrdValue arbeitet, welches Longint zurückliefert, also 32bit. |
Re: published set > 32bit
Zitat:
Zitat:
|
Re: published set > 32bit
DefineProperties sorgt nur für die Speicherung im DFM, sonst nix. Für die Anzeige im OI ist published zuständig, genau das ist der Unterschied zwischen public und published.
Ob die Registrierung eines neuen Property Editors den Precompiler davon abhält, einen Fehler auszugeben, habe ich noch nicht ausprobiert, ich wage es aber schwer zu bezweifeln. Morgen früh werd ich es mal ausprobieren. Edit: Eben habe ich noch Folgendes gefunden, man beachte besonders Punkt 5: ![]() Vielleicht wird der Fehler ja auf diese Weise erzeugt. Ich schau mir die VCL-Quellen morgen früh noch mal genau an. |
Re: published set > 32bit
Wie erwartet hält die Registrierung eines neuen Property Editors den Precompiler nicht davon ab, einen Fehler auszugeben ;-) Große Sets sind damit von vornherein im published ausgeschlossen. Also werde ich jetzt eine Klasse dafür bauen.
Mit der Message-Direktive wird übrigens in der VCL gar nicht gearbeitet. |
Re: published set > 32bit
Zitat:
Mit sowas kann man auch nicht geziehlt Nachrichten z.B. via IF und CASE in einem laufendem Programm ausgeben, denn diese wird immer ausgegeben, wenn der Compiler dort vorbei kommt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz