Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Rätselhaftes Konstrukt in Unit Dialogs (https://www.delphipraxis.net/166090-raetselhaftes-konstrukt-unit-dialogs.html)

idefix2 29. Jan 2012 22:09

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:
[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;
Was bedeutet jeweils die Zeile vor der Funktionsdeklaration mit den eckigen Klammern?

Luckie 29. Jan 2012 22:26

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?

idefix2 29. Jan 2012 22:43

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.

Bernhard Geyer 29. Jan 2012 22:49

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.

idefix2 29. Jan 2012 22:53

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???

himitsu 29. Jan 2012 22:56

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:
http://docwiki.embarcadero.com/RADSt..._Autorisierung

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:
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;
Und nun kann man sich die Klassen und eventuelle Parameter via RTTI auslesen/verarbeiten.

idefix2 29. Jan 2012 23:09

AW: Rätselhaftes Konstrukt in Unit Dialogs
 
Danke - wieder einiges dazugelernt :)

jaenicke 30. Jan 2012 04:43

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.

Uwe Raabe 30. Jan 2012 08:21

AW: Rätselhaftes Konstrukt in Unit Dialogs
 
Zitat:

Zitat von jaenicke (Beitrag 1148195)
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.

Mache ich genauso - als hätten wir voneinander abgeschrieben :-D "Great minds think alike!"

Luckie 30. Jan 2012 08:24

AW: Rätselhaftes Konstrukt in Unit Dialogs
 
Könnt ihr da mal ein beispiel zeigen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:05 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz