Autor Téma: Jak toto rozjet?  (Přečteno 645 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6685
  • Karma: 44
    • Verze Delphi: W10 + D11.1
Re:Jak toto rozjet?
« Odpověď #30 kdy: 17-07-2022, 19:46:34 »

Neverím, že Ti to pomôže. Toto je z návodu D11:
.
Odvodenie triedy editora vlastností
Obe knižnice komponentov definujú niekoľko druhov editorov vlastností, z ktorých všetky pochádzajú z TPropertyEditor . Keď vytvoríte editor vlastností, vaša trieda editora vlastností môže zostúpiť priamo z TPropertyEditor alebo nepriamo prostredníctvom jednej z tried editora vlastností opísaných v tabuľke nižšie. Triedy v jednotke DesignEditors možno použiť pre aplikácie VCL.
Poznámka: Všetko, čo je absolútne nevyhnutné pre editor vlastností, je, že pochádza z TBasePropertyEditor a že podporuje rozhranie IProperty . TPropertyEditor však poskytuje predvolenú implementáciu rozhrania IProperty.
Win11 64b, Delphi 11.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 422
  • Karma: 0
    • Verze Delphi: 7
Re:Jak toto rozjet?
« Odpověď #31 kdy: 17-07-2022, 20:17:46 »
Takže otázka. Mám přesunout ze souboru BitView.pas (unita) tento kód definice Editoru Vlastností:
Kód: Delphi [Vybrat]
  1. // filename property editor .. fileopen dialog box
  2. type
  3.   TBMPFilenameProperty = class (TStringProperty)
  4.   public
  5.     procedure Edit; override;
  6.     function GetAttributes: TPropertyAttributes; override;
  7.   end;
  8.  
  9. procedure TBMPFilenameProperty.Edit;
  10. begin
  11.   with TOpenDialog.Create(Application) do
  12.   begin
  13.     Filename := GetValue;
  14.     Filter := 'Windows bitmaps (*.BMP)|*.BMP';
  15.     Options := Options   [ofPathMustExist, ofFileMustExist, ofHideReadOnly];
  16.     try
  17.       if Execute then
  18.         SetValue(Filename)
  19.     finally
  20.       Free
  21.     end
  22.   end
  23. end;
  24.  
  25. function TBMPFilenameProperty.GetAttributes: TPropertyAttributes;
  26. begin
  27.   Result := [paDialog, paRevertable]
  28. end;
  29.  
  30. procedure Register;
  31. begin
  32.   RegisterComponents ('My Controls', [TBigBitmapViewer]);
  33.   RegisterPropertyEditor (TypeInfo (TBMPFilename), nil, '', TBMPFilenameProperty);
  34. end;
  35.  

Do samostatného souboru pas?
Například BitMapDTE.pas
a pak BitMapDTE.pas při vytváření nového balíčku přidat do require?

Část
Kód: Delphi [Vybrat]
  1. procedure Register;
  2. begin
  3.   RegisterComponents ('My Controls', [TBigBitmapViewer]);
  4.   RegisterPropertyEditor (TypeInfo (TBMPFilename), nil, '', TBMPFilenameProperty);
  5. end;
  6.  

Mám ponechat v té původní run time unitě (bitView.pas) a mám to ale dát do sekce initialization?
Jakože nejprve je nutné ten editor zaregistrovat a pak se může spustit aplikace... Chápu to už správně?

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 422
  • Karma: 0
    • Verze Delphi: 7
Re:Jak toto rozjet?
« Odpověď #32 kdy: 17-07-2022, 22:43:46 »
Tady je návod jak se má rozdělit ten soubor

https://edn.embarcadero.com/article/27717

Jenže není vůbec jasný.

Vytvářejí toto:

Kód: Delphi [Vybrat]
  1. unit MixedComponent;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
  7.  
  8. type
  9.   { TMixedComponent }
  10.   TMixedComponent = class(TComponent)
  11.   private
  12.     FFileName: String;
  13.   published
  14.     property FileName : String read FFileName write FFileName;
  15.     { Published declarations }
  16.   end;
  17.  
  18. implementation
  19.  
  20. end.

Ale neřekli co se s tím má udělat. Nakonec jsem přišel, že oni tam vytvářejí ten komponent z nabídky File->New->Other: New ---> Component

Dělám to správně? (viz obrázek dole)

Pak mi ale není jasné co mám dělat s těma vlastnostma, které odkazují na metody:
Kód: Delphi [Vybrat]
  1.     {    procedure SetActive (Value : boolean);
  2.     procedure SetAutoSize (Value : boolean);
  3.     procedure SetFilename (const Value : TBMPFilename);
  4.     procedure SetStretch (Value : boolean);
  5.     procedure SetCentre (Value : boolean);
  6.     procedure SetDummyInt (Value : integer);}
  7. property AutoSize : boolean read FAutoSize write SetAutoSize default false;
  8. property Centre : boolean read FCentre write SetCentre default false;
  9. property Filename : TBMPFilename read FFilename write SetFilename;
  10. property Stretch : boolean read FStretch write SetStretch default false;
  11. property Colours : integer read FColours write SetDummyInt stored false;
  12. property BitmapHeight : integer read FBitmapHeight write SetDummyInt stored false;
  13. property BitmapWidth : integer read FBitmapWidth write SetDummyInt stored false;
  14. property Active : boolean read FActive write SetActive default false;
  15.  

Protože deklarovat je nemám a když je nenadeklaruju tak musím zakomenotvat ty vlastnosti. Tím pádem ta třída nebude kompletní. A oni to v té ukázce nemají.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 3141
  • Karma: 110
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Jak toto rozjet?
« Odpověď #33 kdy: 18-07-2022, 11:24:24 »
DesignIntf a DesignEditors jsou specialni soubory určené primárně pro podporu designeru v IDE. Vetšinou se komponenty dělí na design balíčky, a runtime balíčky. U design balíčků přidáš do requires balicek designide, který ty dva unity má zakompilované.

Pokud chces mít společné balíčky (tak jak to bylo cca do D5 a schválně se to dělilo), musíš explicitně najít na disku ty dva soubory a přidat si na ně cestu do projektu. Kde to je v D7 nevím, a je mi to jedno, nejmenší tolerovanou verzí se zavrenim oci u mne je D2007 (a to jen protoze je posledni Ansi).
Embarcadero MVP - Czech republic

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 3141
  • Karma: 110
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Jak toto rozjet?
« Odpověď #34 kdy: 18-07-2022, 11:26:31 »

Mám ponechat v té původní run time unitě (bitView.pas) a mám to ale dát do sekce initialization?
Jakože nejprve je nutné ten editor zaregistrovat a pak se může spustit aplikace... Chápu to už správně?

Register volá IDE pro registraci komponent do IDE  a ma smysl jen v design baliccich.
Embarcadero MVP - Czech republic

Offline KarelHorky

  • Hrdina
  • ****
  • Příspěvků: 271
  • Karma: 10
    • Verze Delphi: XE6, Delphi 10.2 Tokyo
Re:Jak toto rozjet?
« Odpověď #35 kdy: 18-07-2022, 12:28:59 »
Excellent
Rated 1 time
Pokud se nepletu, tak jedním z omezení Personal Edition bylo, že do něj nešly instalovat komponenty třetích stran. Můžeš použít všechny komponenty, co tam máš z instalace, ale nemůžeš nic doinstalovat.
Win10 Prof 64b, Firebird 2.5

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1087
  • Karma: 29
    • Verze Delphi: XE8, Sydney
Re:Jak toto rozjet?
« Odpověď #36 kdy: 18-07-2022, 17:29:10 »
Jen poznámka na okraj, v Delphi 6 se poněkud pozměnil interface pro OTA (pokud to má třeba i nějakého wizarda), je potřeba sáhnout i do property a případně poladit typy parametrů či doplnit chybějící deklarace.

Uváděnou knihovnu ovšem neznám.

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1087
  • Karma: 29
    • Verze Delphi: XE8, Sydney
Re:Jak toto rozjet?
« Odpověď #37 kdy: 18-07-2022, 18:26:51 »
Kdybych to dělal já, tak vyrobím asi toto, viz příloha (ale je to v Delphi 2007).

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 422
  • Karma: 0
    • Verze Delphi: 7
Re:Jak toto rozjet?
« Odpověď #38 kdy: 18-07-2022, 18:58:47 »
Tak k poslednímu článku, tématika: rozdělení BitView na design-time a run-time. Ptal jsem se na zahraničním foru a přišla mi odpověď, kterou sem chci zkopírovat. Zatím se nedá říct, že bych rozuměl každé větě. Budu nad tím ještě dumat a kouknu na tu ukázku kodu. Díky Jaro.

Následuje copy/paste citace:

Pro Boolean (AutoSize/Centre/Stretch/Active) již existuje standardní editor vlastností, který umí MultiSelection.
viz TCheckBox.Checked a mnoho dalšího.

Stejně tak pro celá čísla (Colours/BitmapHeigh/BitmapWidth).

Závěr: Pro zobrazené vlastnosti nebude potřeba žádný samostatný editor vlastností.

Runtime balíček :
* Vyžaduje:
* * RTL , VCL a co dalšího je nutné
* je součástí:
* * komponenta (váš BITVIEW.PAS)

design-time balíček *
Vyžaduje:
** runtime balíček (takže zde máte Přístup ke všemu v BITVIEW.PAS)
* přichází v:
* * komponenty designu a podobně
* * RegisterComponent
* * editor vlastností


Pokud aplikace není nikdy zkompilována s balíčky, tj. nikdy nepoužívá balíček , můžete také dát vše do jednoho balíčku zabalit do balení /package/ , protože pak by se stejně použilo jen PAS / DCU a designové věci by neskončily v EXE, ale stejně je lepší něco takového nedělat.



Pokud jde o příklad Borland/Embarcadero, myslel bych si, že již existuje hotový editor vlastností pro (Prohledat referenci)
Kód: Delphi [Vybrat]
  1. Delphi TFileName ,
  2. property FileName : TFileName čtení FFileName zápis FFileName;
ale TMediaPlayer.Filename má editor, ale TOpenDialog.Filename nemá. Existuje tedy editor, ale záleží nejen na typu, ale i na třídě

KONEC CITACE ODPOVĚDI

DALŠÍ ODPOVĚĎ OHLEDNĚ BITVIEW
Není zde žádná komponenta DesignTime a komponenta Runtime. Je to stejná komponenta.

Funkce DesignTime přistupují ke "správné" komponentě.
Vlastnosti nejsou znovu deklarovány v žádné jiné třídě.

TMixedComponent je součástí balíčku Runtime (MixedComponent)
a TMixedFileNameProperty je součástí balíčku DesignTime (MixedComponentReg).

... takže vše ve stejném balení / jednotce.

KONEC CITACE.

OTÁZKA: Jak to ale nadeklarovat?
Kód: Delphi [Vybrat]
  1. private procedure SetActive (Value : boolean);
DALŠÍ ODPOVĚĎ:
Ani to není sdílené.
To vše je součástí komponenty. Tedy ne v balíčku DesignTime .



V PropertyEditoru se k vlastnosti/getter/setter/objekt/třída „normálně“ nepřistupuje přímo, ale využívá dané funkce pro přístup k vlastnosti. (např. SetStrValue/SetStrValueAt/GetStrValue/GetStrValueAt ... interně přes RTTI )
Alternativně PropertyEditor nabízí metodu, jak získat objekt a poté jej zadat sami přes RTTI nebo s přetypováním a pak můžete objekt také přímo pracovat.

KONEC CITACE/ODPOVĚDÍ.

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 422
  • Karma: 0
    • Verze Delphi: 7
Re:Jak toto rozjet?
« Odpověď #39 kdy: 18-07-2022, 19:38:12 »
JaroB, co znamená ta zkratka dcl ve tvém projektu?

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 422
  • Karma: 0
    • Verze Delphi: 7
Re:Jak toto rozjet?
« Odpověď #40 kdy: 18-07-2022, 19:50:55 »
Po přečtení nápovědy v Delphi jsem zase moudřejší co je to Design time a co Run time.

Citace
Komponenty jsou podmnožinou knihovny komponent, které jsou odvozeny od třídy TComponent. Komponenty můžete umístit na formulář nebo datový modul a manipulovat s nimi v době návrhu.

Vizuální komponenty, jako jsou TForm a TSpeedButton, se nazývají ovládací prvky a přecházejí z TControl. Ovládací prvky se používají v aplikacích GUI a zobrazují se uživateli za běhu. TControl poskytuje vlastnosti, které určují vizuální atributy ovládacích prvků, jako je jejich výška a šířka.
Nevizuální komponenty se používají pro různé úkoly. Pokud například píšete aplikaci, která se připojuje k databázi, můžete umístit komponentu TDataSource do formuláře, abyste propojili ovládací prvek a datovou sadu používanou ovládacím prvkem. Toto připojení není pro uživatele viditelné, takže TDataSource je nevizuální. V době návrhu jsou nevizuální komponenty reprezentovány ikonou. To vám umožňuje manipulovat s jejich vlastnostmi a událostmi stejně jako s vizuálním ovládáním.

Ale to je bomba. Tak jestli to správně chápu, tak bych si v Delphi mohl jednoduše napsat VCL formuláře pro tvorbu článků na svoji html stránku, nebo takto spravovat příspěvky v diskusi, aniž bych psal html rozhraní pro admina... Zní to jednoduše, jen navrhnout formuláře, přidat tam komponentu TDataSource nebo co k tomu je třeba, připojit se na ftp a jen to tam nahrát...  :P Což by bylo rychlejší než psát vlastní html, php, js cokoliv složitého. A z pohodlí mého PC by byly rychlejší odezvy než při procházení webových stránek.

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1087
  • Karma: 29
    • Verze Delphi: XE8, Sydney
Re:Jak toto rozjet?
« Odpověď #41 kdy: 18-07-2022, 21:23:45 »
JaroB, co znamená ta zkratka dcl ve tvém projektu?

třeba něco jako design comp. lib ? :)

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 422
  • Karma: 0
    • Verze Delphi: 7
Re:Jak toto rozjet?
« Odpověď #42 kdy: 18-07-2022, 21:51:39 »
Otevřu dclBITVIEW.pas
dám nabídku Component -> Install component
a v package filename se objeví toto
delphi7\Lib\dclusr.dpk

Co je to za soubor dclusr.dpk? Když jsem dal OK tak mi vyskočila výzva, že ten soubor bude rebuild?

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1087
  • Karma: 29
    • Verze Delphi: XE8, Sydney
Re:Jak toto rozjet?
« Odpověď #43 kdy: 18-07-2022, 22:03:42 »
Jak je to v Delphi 7 si už tak moc nepamatuju, ale bude to stejně - nejprve se přeloží rBITVIEW.dpk a pak se dBITVIEW.dpk nainstaluje do IDE.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 3141
  • Karma: 110
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Jak toto rozjet?
« Odpověď #44 kdy: 19-07-2022, 10:11:14 »
Otevřu dclBITVIEW.pas
dám nabídku Component -> Install component
a v package filename se objeví toto
delphi7\Lib\dclusr.dpk

Co je to za soubor dclusr.dpk? Když jsem dal OK tak mi vyskočila výzva, že ten soubor bude rebuild?

Ty nechces instalovat jednotlivou komponentu (ta se pridavala do balicku user.dpk), ale primo balicek jak pise JaroB
Embarcadero MVP - Czech republic