![]() |
Rätselhaftes Konstrukt in Unit Dialogs
Hallo, auf der Suche nach einer etwas flexibleren Routine als ShowMessage und MessageDlg bin ich zwar im Quelltext der Unit Dialogs fündig geworden, da gibt es z.B. messageDlgPos, bei dem man die Position des Dialogs am Bildschirm festlegen kann, und überladene Routinen, denen man noch den Titel der Messagebox mitgeben kann - ich bin aber dabei über ein Delphi konstrukt gestolpert, das ich noch nie gesehen habe, und würde gerne wissen, was das eigentlich ist:
Delphi-Quellcode:
Was bedeutet jeweils die Zeile vor der Funktionsdeklaration mit den eckigen Klammern?
[UIPermission(SecurityAction.LinkDemand, Window=UIPermissionWindow.SafeSubWindows)]
function MessageDlgPos(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer): Integer; begin Result := MessageDlgPosHelp(Msg, DlgType, Buttons, HelpCtx, X, Y, ''); end; [UIPermission(SecurityAction.LinkDemand, Window=UIPermissionWindow.SafeSubWindows)] function MessageDlgPos(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer; DefaultButton: TMsgDlgBtn): Integer; overload; begin Result := MessageDlgPosHelp(Msg, DlgType, Buttons, HelpCtx, X, Y, '', DefaultButton); end; |
AW: Rätselhaftes Konstrukt in Unit Dialogs
Was das ist, kann ich dir auch nicht sagen. Würde mich aber auch interessieren. Aber hast du schon mal an die Windows API Funktion Messagebox gedacht oder den VLC Wrapper als Methode von TApplication: Applicatiuon.Messagebox? Bzw. was sollte der Dialog denn können?
|
AW: Rätselhaftes Konstrukt in Unit Dialogs
Eigentlich genügt mir das, was ich in der Unit Dialogs gefunden habe: Die Messagebox beliebig am Bildschirm positionieren und ihr einen Titel verpassen - Diesbezüglich bin ich ganz glücklich.
Aber ich habe noch nie in einem Delphi-Programm eine Zeile gesehen, die so in eckigen Klammern herumschwirrt, und hätte gerne gewusst, was das soll - einfach nur interesse halber. |
AW: Rätselhaftes Konstrukt in Unit Dialogs
Meinst du UIPermission? Dürfte sich um Überbleibsel der gescheiterten VCL.NET-Implementierung handeln. Damit teilst du mit welche Rechte die Methode/Funktion benötigt.
|
AW: Rätselhaftes Konstrukt in Unit Dialogs
das ist schon einmal eine interessante information - aber die Syntax ist mir trotzdem rätselhaft: nach allem was ich bis jetzt an Delphi Syntax kenne müsste der Compiler doch bei den eckigen Klammern streiken???
|
AW: Rätselhaftes Konstrukt in Unit Dialogs
Das sind "Attribute".
Such einfach mal in der Unit RTTI nach "Attribute" oder schau dich beim DataSnap um (aktuelles Beispiel in der Nutzung) Auch wenn ich dieses vollkommen krank finde, denn wer sollte schon auf die blöde Idee kommen Gruppen und Passwörter Hardgecodes im Queltext anzulegen, wo doch alle mehr mit dynamischen Strukturen arbeitet, wie z.B. Datenbanken. Oder kommt das wirklich so cool, wenn man die Anwendung neu kompilieren soll, nur um eine neue Rolle anzulegen oder ein Passwort zu ändern? :wall: ![]() Dort kann man also zusätzliche Infos zu Funktionen/Prozeduren, Klassen/Typen, Methoden, Propertys und Variablen hinterlegen, welche sich dann via RTTI auslesen lassen. Das wurde auch an ein/zwei Stellen in den Delphi-Quellcodes angewendet. (aber ich weiß nicht mehr wo ich das gesehn hatte und Aufgrund der Syntax läßt es sich nicht grade leicht suchen)
Delphi-Quellcode:
Und nun kann man sich die Klassen und eventuelle Parameter via RTTI auslesen/verarbeiten.
type
TMyAttribute = class(TCustomAttribute) constructor Create(S: string); end; [TMyAttribute('7')] TMySet = set of TMyEnum; ['direkt als Text'] TMyEnum = type TMyEnum; [TMyAttribute('1')] TMyClass = class [TMyAttribute('8')] FMyField: Integer; [TMyAttribute('2')] [TMyAttribute('3')] procedure MyMethod2; [TMyAttribute('2'), TMyAttribute('3')] function MyMethod: Boolean; [TMyAttribute('4')] property MyProperty: Boolean read MyMethod; end; var [TMyAttribute('5')] MyVar: Integer; [TMyAttribute('6')] procedure MyProcdure; |
AW: Rätselhaftes Konstrukt in Unit Dialogs
Danke - wieder einiges dazugelernt :)
|
AW: Rätselhaftes Konstrukt in Unit Dialogs
Beispiel für die Nutzung bei uns:
Per Attribut wird festgelegt welche XML-Knoten oder Datenbankeinträge zu den Feldern der Klasse gehören. Danach kann man die einfach an eine Funktion übergeben, die dann die Daten liest oder schreibt. Benutzen tun wir das z.B. bei Einstellungsklassen. Auf diese Weise müssen die Einstellungsklassen nichts über die Datenstrukturen wissen, in denen die Daten liegen. |
AW: Rätselhaftes Konstrukt in Unit Dialogs
Zitat:
|
AW: Rätselhaftes Konstrukt in Unit Dialogs
Könnt ihr da mal ein beispiel zeigen?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 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