AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Wie teilt man diese Bibliothek in Entwurfszeit und Laufzeit auf?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie teilt man diese Bibliothek in Entwurfszeit und Laufzeit auf?

Ein Thema von neumimnemecky · begonnen am 18. Jul 2022 · letzter Beitrag vom 18. Jul 2022
Antwort Antwort
neumimnemecky

Registriert seit: 21. Dez 2018
45 Beiträge
 
#1

Wie teilt man diese Bibliothek in Entwurfszeit und Laufzeit auf?

  Alt 18. Jul 2022, 10:44
Wie wird diese Bibliothek (
Big Bitmap Viewer v.1.01
) gemäß diesem Artikel in Entwurfszeit und Laufzeit aufgeteilt?
https://edn.embarcadero.com/article/27717
Ich benutze D7 und die Komponente ist in der alten D2(?).

Der Artikel enthält ein Beispiel:

Code:
unit MixedComponent;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  { TMixedComponent }
  TMixedComponent = class(TComponent)
  private
    FFileName: String;
  published
    property FileName : String read FFileName write FFileName;
    { Published declarations }
  end;

implementation

end.
Wie Sie sehen können, gibt es keine Funktionsdeklaration, aber die BitView-Komponente verwendet einen einfachen Ein-Element-Eigenschaftseditor, und die Klasse hat Eigenschaften, auf die über eine Methode zugegriffen wird.

Daher kann ich die Eigenschaften, die Teil der Klasse sein sollten, nicht deklarieren:

Code:
{    property AutoSize : boolean read FAutoSize write SetAutoSize default false;
// bitmap centred
    property Centre : boolean read FCentre write SetCentre default false;
// filename of bitmap
    property Filename : TBMPFilename read FFilename write SetFilename;
// stretch bitmap
    property Stretch : boolean read FStretch write SetStretch default false;
// READ-ONLY PROPS
    property Colours : integer read FColours write SetDummyInt stored false;
    property BitmapHeight : integer read FBitmapHeight write SetDummyInt stored false;
    property BitmapWidth : integer read FBitmapWidth write SetDummyInt stored false;
    property Active : boolean read FActive write SetActive default false;
}
property Active : boolean read FActive write SetActive default false;

Und ich kann diese Methoden nicht deklarieren, weil ich sie nicht in dieser Datei implementieren kann. Und der Artikel ist einfach nicht erklärend genug, es wird nicht erklärt, wie es geht.

Danke.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Wie teilt man diese Bibliothek in Entwurfszeit und Laufzeit auf?

  Alt 18. Jul 2022, 11:10
Für Boolean (AutoSize/Centre/Stretch/Active) gibt es bereits einen fertigen Standard-PropertyEditor, welcher auch mit MultiSelection klar kommt.
siehe TCheckBox.Checked uvm.

Ebenso für Integer (Colours/BitmapHeigh/BitmapWidth).

Fazit: Für die gezeigten Property wäre garkein eigener Property-Editor nötig.




Runtime-Package:
* Requires:
* * RTL, VCL und was noch nötig ist
* rein kommt :
* * die Komponente (deine BITVIEW.PAS)

Design-Time-Package
* Requires:
* * das Runtime-Package (also hat man hier Zugriff auf alles in der BITVIEW.PAS)
* rein kommt:
* * die Design-Komponenten und so
* * RegisterComponent
* * der Property-Editor


Wird die Anwendung niemals mit Packages kompiliert, also niemals das Package verwendet, könnte mman auch alles in ein Package packen, da dann eh nur die PAS/DCU verwendet werden und das DesignZeugs nicht in der EXE landen würde, aber sowas macht man dennoch besser nicht. (nicht dass es raucht, wenn doch mal wer mit Packages kompiliert)



Bezüglich des Beispiels von Borland/Embarcadero,
da hätte ich gedacht, dass es bereits einen fertigen Property-Editor für Delphi-Referenz durchsuchenTFileName gäbe,
property FileName : TFileName read FFileName write FFileName;
aber TMediaPlayer.Filename hat einen Editor, aber TOpenDialog.Filename nicht. Also es gibt einen Editor, aber er hängt nicht nur am Typ, sondern auch an der Klasse
$2B or not $2B

Geändert von himitsu (18. Jul 2022 um 11:29 Uhr)
  Mit Zitat antworten Zitat
neumimnemecky

Registriert seit: 21. Dez 2018
45 Beiträge
 
#3

AW: Wie teilt man diese Bibliothek in Entwurfszeit und Laufzeit auf?

  Alt 18. Jul 2022, 11:19
Runtime-Package:
Wird die Anwendung niemals mit Packages kompiliert, also niemals das Package verwendet, könnte mman auch alles in ein Package packen, da dann eh nur die PAS/DCU verwendet werden und das DesignZeugs nicht in der EXE landen würde, aber sowas macht man dennoch besser nicht. (nicht dass es raucht, wenn doch mal wer mit Packages kompiliert)

Und wie löst man diesen speziellen Code der Klassen-property-Deklaration für die Schreib- oder Lesemethode?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: Wie teilt man diese Bibliothek in Entwurfszeit und Laufzeit auf?

  Alt 18. Jul 2022, 11:35
Es gibt hier keine DesignTime-Komponente und Runtime-Komponente.
Es ist die selbe Komponente.

Die DesignTime-Funktionen greifen auf die "richtige" Komponente zu.
Die Property werdem nicht nochmals deklariert, in keiner anderen Klasse.





TMixedComponent kommt ins Runtime-Package (MixedComponent)
und TMixedFileNameProperty kommt ins DesignTime-Package (MixedComponentReg).

Oder eben einfach billig so, wie es anfangs in dem Artikel aussieht ... also alles ins selbe Package/Unit.
$2B or not $2B

Geändert von himitsu (18. Jul 2022 um 11:39 Uhr)
  Mit Zitat antworten Zitat
neumimnemecky

Registriert seit: 21. Dez 2018
45 Beiträge
 
#5

AW: Wie teilt man diese Bibliothek in Entwurfszeit und Laufzeit auf?

  Alt 18. Jul 2022, 12:39
Es gibt hier keine DesignTime-Komponente und Runtime-Komponente.
Es ist die selbe Komponente.

Die DesignTime-Funktionen greifen auf die "richtige" Komponente zu.
Die Property werdem nicht nochmals deklariert, in keiner anderen Klasse.
Aber wie man so etwas deklariert (Split):
Code:
private
 procedure SetActive (Value : boolean);
public
property Active : boolean read FActive write SetActive default false;
Ich kann mir die Aufteilung hier nicht vorstellen.
Ich werde braten
Code:
 procedure SetActive (Value : boolean);
public
und
Ich erhalte eine Fehlermeldung, dass SetActive nicht deklariert ist.
Ich lösche die Active-Eigenschaft,
und ich werde das ganze Objekt stören.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: Wie teilt man diese Bibliothek in Entwurfszeit und Laufzeit auf?

  Alt 18. Jul 2022, 12:45
Das wird auch nicht aufgeteilt.
Es gehört alles zur Komponente. Also nicht ins DesignTime-Package.



Im PropertyEditor greift man "normal" garnicht direkt auf das Property/Getter/Setter/Objekt/Klasse zu, sondern nutzt die gegebenen Funktionen für den Zugriff auf das Property. (z.B. SetStrValue/SetStrValueAt/GetStrValue/GetStrValueAt ... intern via RTTI)
Alternativ bietet der PropertyEditor eine Methode an, um das Objekt zu bekommen und dann selber via RTTI oder mit einem Cast zu Typen und da kann man dann auch direkt mit dem Objekt arbeiten.
$2B or not $2B

Geändert von himitsu (18. Jul 2022 um 13:14 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:19 Uhr.
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