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

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 422
  • Karma: 0
    • Verze Delphi: 7
Jak toto rozjet?
« kdy: 16-07-2022, 17:40:53 »
Snažím se v D7 rozjet kod z D2/D3 a dostávám chybu:
[Error] BitView.pas(481): Undeclared identifier: 'TStringProperty'

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;

Jak to rozjet? Měla to prý být součást Design Time Editor nebo něco podobného Design IDE či co.

https://torry.net/pages.php?s=72#google_vignette

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1389
  • Karma: 51
    • Verze Delphi: 10.3
Re:Jak toto rozjet?
« Odpověď #1 kdy: 16-07-2022, 17:49:28 »
Ve starších verzích nevím, ale v Delphi 11.1 je to v unitě DesignEditors.pas.

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 422
  • Karma: 0
    • Verze Delphi: 7
Re:Jak toto rozjet?
« Odpověď #2 kdy: 16-07-2022, 17:57:18 »
Ve starších verzích nevím, ale v Delphi 11.1 je to v unitě DesignEditors.pas.

Zkoušel jsem už různá uses:
DesignEditors
DesignIntf
DesignIDE
DsgnIntf
nic z toho v D7 není

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6685
  • Karma: 44
    • Verze Delphi: W10 + D11.1
Re:Jak toto rozjet?
« Odpověď #3 kdy: 16-07-2022, 19:04:36 »
Mám dve rady:
  • kurzor do slova + F1
  • hľadaj v prílohe. Netuším či to tam je. Mne sa v tom hrabať nechce
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ěď #4 kdy: 16-07-2022, 19:48:33 »
není to tam

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3435
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Jak toto rozjet?
« Odpověď #5 kdy: 16-07-2022, 19:56:30 »
Ve starších verzích nevím, ale v Delphi 11.1 je to v unitě DesignEditors.pas.
V D2007 take.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6685
  • Karma: 44
    • Verze Delphi: W10 + D11.1
Re:Jak toto rozjet?
« Odpověď #6 kdy: 16-07-2022, 20:13:22 »
Som dobrý, už sa pomaly učím ako používať internet ;D
http://www.delphigroups.info/2/8a/545640.html
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ěď #7 kdy: 16-07-2022, 22:54:05 »
Som dobrý, už sa pomaly učím ako používať internet ;D
http://www.delphigroups.info/2/8a/545640.html

Vše z toho posledního příspěvku na daném odkazu jsem zkoušel a nic z toho mi nefunguje. Na to, že je to na D6 by to snad jet mělo... Nebo nechce se mi věřit, že by to v D7 zase měnili.

V nápovědě D7 je něco o DesignEditors unit, ale uses DesignEditors dá chybu:
[Fatal Error] BitView.pas(42): File not found: 'DesignEditors.dcu'
Soubor DesignEditors.pas jsem v ./Delphi7/ nenašel
« Poslední změna: 16-07-2022, 22:58:12 od vangog »

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 422
  • Karma: 0
    • Verze Delphi: 7
Re:Jak toto rozjet?
« Odpověď #8 kdy: 16-07-2022, 23:08:39 »
Možná se to musí zaregistrovat před tím než se to použije? Jenže to je v implementační části. Něco jako:

Kód: Delphi [Vybrat]
  1. procedure Register;
  2. begin
  3.   RegisterComponentEditor(TComponent1, TMyComponentEditor);
  4. end;
  5.  
  6. { TMyComponentEditor }
  7.  
  8. procedure TMyComponentEditor.Edit;
  9. begin
  10.   ShowComponentEditor(Designer, Tcomponent1(Component), GetDesignerClass);
  11. end;
  12.  

Kde ale využívají nějaký další soubor, kde je definovaný ten editor

https://community.embarcadero.com/article/technical-articles/162-programming/6215-custom-component-editors-in-delphi-2006--1

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1564
  • Karma: 37
    • Pepak.net
Re:Jak toto rozjet?
« Odpověď #9 kdy: 17-07-2022, 08:12:05 »
Nejjednodušší je v dané verzi Delphi použít nějaký souborový manažer (např. FAR Manager nebo Total Commander) a prohledat adresář se zdrojáky Delphi (obvykle Delphi\Source) na výskyt TStringProperty =. No a hned na tebe vypadne, že to je v unitě DesignEditors, jak ti radili ostatní, v podadresáři ToolsAPI. Následně se můžeš podívat do adresáře s knihovnami (obvykle Delphi\Lib), zjistit, že tam chybí soubor DesignEditors.dcu, a vyřešit to celé tak, že adresář Delphi\Source\ToolsAPI přidáš do SearchPath - buď v daném projektu, nebo globálně v celých Delphi, to už je celkem jedno.

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 422
  • Karma: 0
    • Verze Delphi: 7
Re:Jak toto rozjet?
« Odpověď #10 kdy: 17-07-2022, 11:21:00 »
Nejjednodušší je v dané verzi Delphi použít nějaký souborový manažer (např. FAR Manager nebo Total Commander) a prohledat adresář se zdrojáky Delphi (obvykle Delphi\Source) na výskyt TStringProperty =.

Skvělý nápad. Používám PSPAd. Ale s D7 jste všichni byli vedle jak ta jedle  :D Příště dát hledat *.pas; *.dcp

aby to netrvalo tak dlouho.

Edit:
Delphi\Source\ToolsAPI  neexistuje. Proč?
« Poslední změna: 17-07-2022, 11:36:21 od vangog »

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 422
  • Karma: 0
    • Verze Delphi: 7
Re:Jak toto rozjet?
« Odpověď #11 kdy: 17-07-2022, 11:31:29 »
Zkusil jsem toto:
uses ... ddeReg;
a compiler mě přesměroval do toho souboru

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, Buttons, TypInfo, DesignIntf, DesignEditors, DdeMan, Messages, StdCtrls, ExtCtrls;

A zase ta chybová hláška. [Fatal Error] ddeReg.pas(6): File not found: 'DesignIntf.dcu'

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6685
  • Karma: 44
    • Verze Delphi: W10 + D11.1
Re:Jak toto rozjet?
« Odpověď #12 kdy: 17-07-2022, 11:48:11 »
OT: Ak chceš mať rýchle vyhľadávanie, tak si nainštaluj Everything. Odozva je okamžitá.
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ěď #13 kdy: 17-07-2022, 11:50:47 »
OT: Ak chceš mať rýchle vyhľadávanie, tak si nainštaluj Everything. Odozva je okamžitá.

Já si počkám. Ale zajímalo by mě proč v mém Delfi není ta složka ToolsAPI

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6685
  • Karma: 44
    • Verze Delphi: W10 + D11.1
Re:Jak toto rozjet?
« Odpověď #14 kdy: 17-07-2022, 12:10:57 »
Ak máš dosť času a nervov.
Len taká pripomienka: ak nenapíšeš cestu, tak "prehľadá" kompletne všetky disky. Nemôže sa stať, že čosi vynechá. Ktovie, či to nie je Tvoj problém(?).
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ěď #15 kdy: 17-07-2022, 12:20:25 »
Ak máš dosť času a nervov.
Len taká pripomienka: ak nenapíšeš cestu, tak "prehľadá" kompletne všetky disky. Nemôže sa stať, že čosi vynechá. Ktovie, či to nie je Tvoj problém(?).

Ne ne, na to opravdu nervy nemám, abych si nechal skenovat všech 24 disků, nebo 36 nebo kolik jich je ani nevím.

Offline delirium

  • Nováček
  • *
  • Příspěvků: 8
  • Karma: 0
Re:Jak toto rozjet?
« Odpověď #16 kdy: 17-07-2022, 12:25:56 »
D7 mas?

Delphi 7 Architect
Delphi 7 Enterprise
Delphi 7 Professional
Delphi 7 Personal

m.

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 422
  • Karma: 0
    • Verze Delphi: 7
Re:Jak toto rozjet?
« Odpověď #17 kdy: 17-07-2022, 12:28:42 »
D7 mas?

Delphi 7 Architect
Delphi 7 Enterprise
Delphi 7 Professional
Delphi 7 Personal

m.

Personal. To je free verze.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6685
  • Karma: 44
    • Verze Delphi: W10 + D11.1
Re:Jak toto rozjet?
« Odpověď #18 kdy: 17-07-2022, 13:30:02 »
Na rozlúčku s Everything posledné poznámky ;) :
  • skenovanie diskov sa robí jediný krát
  • predtým si môžeš nastaviť čo sa nemá skenovať
  • v najhoršom prípade to necháš bežať v noci
  • potom beží na pozadí. Bez toho aby si to nejako pociťoval
  • nemám toho veľa. U mňa to skenovanie trvalo 11 minút
  • vytvára si vlastnú databázu
  • dnes som si nastavil zobrazenie počtu položiek. Mám ich vyše 3,8 mil. To ma poriadne prekvapilo
  • vždy mám okamžitú odozvu
  • najviac sa mi páči skutočnosť, že mám okamžitý výsledok zo všetkých diskov. Až dva fyzické :) . Prípadne tri, ak pripojím externý záložný
  • nemôžem na niečo zabudnúť
  • ak napíšem cestu, tak mám výsledky podľa nej
  • TC používam na hľadanie v malých adresároch. Vždy musím počkať
V minulosti sa dali pri kúpe, povýšení delphi na vyššiu verziu nainštalovať nižšie verzie. Už neviem po ktorú. Neviem či to platí, ale táto možnosť bola vždy časovo obmedzená

Win11 64b, Delphi 11.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3435
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Jak toto rozjet?
« Odpověď #19 kdy: 17-07-2022, 14:21:06 »
Personal. To je free verze.
Njn, to je nejaka orezana "detska" verze tusim bez DataSetu a buhvi ceho jeste. Nejspis soucasti instalace nejsou ani zdrojovky. Ale to jsi mel uvest hned.

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 422
  • Karma: 0
    • Verze Delphi: 7
Re:Jak toto rozjet?
« Odpověď #20 kdy: 17-07-2022, 15:40:55 »
Personal. To je free verze.
Njn, to je nejaka orezana "detska" verze tusim bez DataSetu a buhvi ceho jeste. Nejspis soucasti instalace nejsou ani zdrojovky. Ale to jsi mel uvest hned.

Nějak jsem zapomněl, že existují ještě nějaké profi verze. Obvykle se uvádí jen základní verze D7 ... Nicméně možná jádro celého problému leží někde jinde.

Vyštrachal jsem na netu zapomenutý článek od Borlandu:

What ever happened to Proxies.pas?
Rating: Rating is 3.5 - 4.5     Ratings: 10     Rate it

    Abstract: This article illustrates a scheme for properly segregating runtime code from design-time code in Delphi. By Jeff Overcash.

One frequent question since Delphi 6 shipped has concerned the disappearance of Proxies.pas from the source.

This change is part of a larger trend.

Borland chose not to ship DsgnIntf.dcu with Delphi 5, apparently to force compliance with the Delphi and C++Builder license agreements. The design-time code had been inadvertently used at runtime by many components. In some ways Borland encouraged this behavior: If you use the new component wizard you will see that this wizard creates only one unit, putting both the component skeleton code (runtime) and the Register procedure (design-time) in the same unit.

With Delphi 6, Borland has taken the next step. Not only was DsgnIntf replaced with DesignIntf, but the property editors were also pulled out into DesignEditors, DesignMenus, DesignWindows and other design-time files. DesignEditors in particular uses another IDE file named Proxies. (The Proxies code resides in DesignIDE.bpl.) Needless to say, these changes can result in errors at compile time.

If your code is already segregated in terms of runtime versus design-time then the fix is very simple. Open up your design-time package, select the requires folder and hit the Add button. Type designide.dcp and hit OK. Recompile your package and the error should go away.

But how can this problem be fixed when design-time and runtime code has been mixed together? DesignIDE.bpl is not a redistributable package in Delphi. So even in situations where the "design-time only" package has the component's runtime code and only the component dcu is used, there can still be a problem.

...

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1087
  • Karma: 29
    • Verze Delphi: XE8, Sydney
Re:Jak toto rozjet?
« Odpověď #21 kdy: 17-07-2022, 16:41:18 »
Při převodu z D2/D3 je potřeba upravit původní kod, rozdělit ho na runtime a designtime části. V designtime se volá designIDE balíček kde jsou dislokovány designtime editory.
Pokud jsem to pochopil dobře, je potřeba prostě tyto úpravy v kódu udělat.
V D7 by to možná mohlo ještě fungovat, ale potřebuje to nějakou magii v projektovém souboru v sekci uses.
:)

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 422
  • Karma: 0
    • Verze Delphi: 7
Re:Jak toto rozjet?
« Odpověď #22 kdy: 17-07-2022, 17:25:39 »
Při převodu z D2/D3 je potřeba upravit původní kod, rozdělit ho na runtime a designtime části. V designtime se volá designIDE balíček kde jsou dislokovány designtime editory.
Pokud jsem to pochopil dobře, je potřeba prostě tyto úpravy v kódu udělat.
V D7 by to možná mohlo ještě fungovat, ale potřebuje to nějakou magii v projektovém souboru v sekci uses.
:)

Čtu ale nerozumím. Nechápu pořádně rozdíl mezi runtime a designtime.

Např. jsem četl:
"The only place where there is a little confusion is if the property/component editor uses a form. If that form is available at runtime to the component, it belongs in the runtime package. If it is only available at design-time, it goes in the design-time package. A very common misperception is that the form itself is the editor, but it is not. It is the component editor that calls the form that is the design-time editor."

Nevím co si pod těmi pojmy (tučně) prakticky představit. Design time je to co je v .dfm? Formulář navržený v editoru? A co je pak to když se ten formulář otevře během spuštění aplikace. Např. 1) kliknu na menu otevřít soubor, 2) vyjede dialogové okno, 3) potvrdím 4) do obrázku se načte jpeg převedený TBitmap. Je to práce v runtime nebo v design time?

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1087
  • Karma: 29
    • Verze Delphi: XE8, Sydney
Re:Jak toto rozjet?
« Odpověď #23 kdy: 17-07-2022, 18:21:01 »
Designtime balíčk je BPL, které je nataženo do IDE (a jsou v něm formuláře, editory, registrace komponent, případně další pomocný kód, aktivní v IDE, který se ve finální aplikaci obvykle nevyskytuje). V runtime balíčku BPL je výkonný kód. Balíček se jako soubor přidává k aplikaci, která je sama přeložená s balíčky.
Toto funguje už od Delphi 3 (tam byly balíčky DPL, později přejmenované na BPL); balíček == DLL knihovna.
Aplikace přeložená s balíčky vypadá opticky menší, jelikož kód VCL a dalších podpůrných komponent je právě v DLL souborech (v těch BPL balíčcích). Prakticky je ale větší, jelikož potřebuje vlastní VCL balíčky a pak případné balíčky třetích stran.
Důvody, proč se to takto dělalo, byly různé, ale hlavní důvody byly ve své době distribuční (to se ovšem nepředpokládala nekompatibilita balíčků mezi jednotlivými verzemi a poměrně svižná obměnou Delphi co rok).
Takže shrnuto, runtime balíček je pro distribuci aplikace (přeložené s balíčky) a designtime pro běh v IDE Delphi prostředí.
Pokud se aplikace překládá bez balíčků jako monolit, tak se samozřejmě BPL soubory nedistribuují, ale i tak jsou potřebné pro správnou funkci IDE.
Snad jsem to řekl správně, když tak mě opravte... :|
« Poslední změna: 17-07-2022, 18:22:50 od JaroB »

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1087
  • Karma: 29
    • Verze Delphi: XE8, Sydney
Re:Jak toto rozjet?
« Odpověď #24 kdy: 17-07-2022, 18:25:34 »
1) kliknu na menu otevřít soubor, 2) vyjede dialogové okno, 3) potvrdím 4) do obrázku se načte jpeg převedený TBitmap. Je to práce v runtime nebo v design time?

Pokud je toto na nějaké property komponentě v IDE DElphi, tak je to designtime operace, jestliže je to za běhu aplikace tak runtime :)

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 422
  • Karma: 0
    • Verze Delphi: 7
Re:Jak toto rozjet?
« Odpověď #25 kdy: 17-07-2022, 18:49:21 »
Aplikace přeložená s balíčky vypadá opticky menší, jelikož kód VCL a dalších podpůrných komponent je právě v DLL souborech (v těch BPL balíčcích). Prakticky je ale větší, jelikož potřebuje vlastní VCL balíčky a pak případné balíčky třetích stran.

Takže když udělám mini aplikaci, která využívá Image32 tedy GR32, tak musím k .exe souboru dodat i GR32 tedy pro Windows XP (jelikož kompiluji na Win XP). A pokud instalačku GR 32 pro Win 32 neseženu, tak to koncový uživatel vůbec nespustí? Nebo mohu zkopírovat soubory od GR32 a přidat je k aplikaci? To asi ne, to by mu nejelo, že? A blbé je, že on by musel tomu rozumět - odborně nainstalovat GR32. Jako koncový uživatel neví co potřebuje pro to, aby aplikace na ořezávání obrázku, úpravu světlosti a korekce barvy + např. algoritmus na detekci obličeje správně fungovala. A pokud bych například sehnal ty moduly DesignTime, DesignIDE nebo co všechno je třeba, zkompiloval je, tak je k tomu nejspíš nemohu přidat, protože nejspíš nejsou určeny pro samostatnou distribuci v runtime balíčku z licenčních důvodů.
Pokud je to tak složité pak proč vůbec používat externí knihovny/balíčky .bgl ... Třeba si někdo chce jen udělat vizualizaci - ekvalizér k audio přehrávači na knihovně z produkce Mitov, nebo cokoliv co potřebuje na zpracování signálu - obraz, audio, video, a narazí na problém - třeba, že aby to mohl dál distribuovat, musel by si koncový uživatel licenci koupit? Ale balíčky Mitov jsem normálně našel zdarma ke stažení, ale bez návodu a bez zdrojáku (takže asi k ničemu, protože za víc se platí).

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3435
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Jak toto rozjet?
« Odpověď #26 kdy: 17-07-2022, 18:55:57 »
Jeste to zkusim popsat jednoduse:

design-time: pracuje to ve spustenem Delphi IDE tj. v dobe, kdyz tahas komponenty z palet a v property editoru vyplnujes vlastnosti. Kdybys napsal nejakou vlastni komponentu a chtel bys umoznit nastaveni jejich parametru, musel bys k ni napsat jeji design-time editor.

run-time: to, co bezi po spusteni tvoji prelozene aplikace.

Uz si to moc nepamatuju, ale puvodne to bylo spolecne, takze jsi do run-time mohl/musel tahat veci z design-time tj. veci urcene jen do Delphi IDE. Oni to kdysi striktne rozdelili, takze se aplikace musely upravit tak, aby se run-time neodkazoval na design-time zalezitosti a naopak (to nedava ani smysl).

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1087
  • Karma: 29
    • Verze Delphi: XE8, Sydney
Re:Jak toto rozjet?
« Odpověď #27 kdy: 17-07-2022, 19:05:53 »
Pokud se jedná o mini aplikaci, tak je monolitická aplikace bez balíčků dobrá volba. Ale může využívat čistokrevné DLL třetích stran (třeba pro unRAR).
GR32 lze přilinkovat bez problémů, dělal jsem s ní před pár lety osciloskop (v Delphi 2007).
Pro distribuci je jednodušší jeden EXE než hafo knihoven, na to je pak už potřeba instalátor.
Balíčkovou app jsem dělal kdysi jenom jednu aplikaci s platebními moduly a to bylo hafo exe (asi 15) a změť DLL s BPL, pro pokladnu, pro terminál, pro server, CGI wraper, DB, FTP přístup... atp. atp. to už byla aplikace vetší a tam se vyplatilo distribuovat balíčky, ty se nainstalovaly jednou a už na hostitelských PC zůstaly, jen EXE se vyměňovaly pole oprav a požadavků.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6685
  • Karma: 44
    • Verze Delphi: W10 + D11.1
Re:Jak toto rozjet?
« Odpověď #28 kdy: 17-07-2022, 19:08:25 »
Presne tak som si to predstavoval aj ja:
design_time - tu musí byť všetko, čo potrebujem pre prácu v čase návrhu formulára
run_time - tu musí byť všetko, čo je potrebné pre správnu činnosť komponentu počas behu aplikácie
.
Nikdy som to nepotreboval a ani neriešil. Mojich pár komponentov je jednoduchých. To rozdelenie nebolo potrebné riešiť.
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ěď #29 kdy: 17-07-2022, 19:20:57 »
Jeste to zkusim popsat jednoduse:

design-time: pracuje to ve spustenem Delphi IDE tj. v dobe, kdyz tahas komponenty z palet a v property editoru vyplnujes vlastnosti. Kdybys napsal nejakou vlastni komponentu a chtel bys umoznit nastaveni jejich parametru, musel bys k ni napsat jeji design-time editor.

No to je případ této knihovny bitview. Autor píše:
"
//=========================== *BIG* BITMAP VIEWER (Vydáno rok 97)
This component came about because I wanted to display 4000 x 4000 x 256 colour
// bitmaps (about 16MB in size).  Using a TBitmap and a TImage took ages to load
// the images as a whole load of disc-swap file activity took place."

Takže vím že je to komponenta.
Je k tomu přiložený soubor .dfm:
Kód: Delphi [Vybrat]
  1. object BitView: TBitView
  2.   Left = 249
  3.   Top = 192
  4.   Width = 544
  5.   Height = 375
  6.   Caption = 'Form1'
  7.   Color = clBtnFace
  8.   Font.Charset = DEFAULT_CHARSET
  9.   Font.Color = clWindowText
  10.   Font.Height = -11
  11.   Font.Name = 'MS Sans Serif'
  12.   Font.Style = []
  13.   OldCreateOrder = False
  14.   PixelsPerInch = 96
  15.   TextHeight = 13
  16. end
  17.  
A to je jako ten jeho vlastní editor... Ale říká se tomu komponenta. Tohle já dělám taky. Vytvářím vlastní aplikaci a formulář si navrhnu sám. Ale používá komponenty Delphi IDE. A tak teď tedy nevím jestli ta moje aplikace, když ji zkompiluji pojede samostantě bez Delphi na PC kde Delphi není.

Teď kousek z té komponenty Bitview.
Kód: Delphi [Vybrat]
  1. unit
  2.   BitView;
  3.  
  4. interface
  5.  
  6. uses
  7.   Windows, Messages, SysUtils, Classes,
  8.   Graphics, Controls, Forms, Dialogs,
  9.   DSIntf;
  10.   {
  11.   ddeReg,
  12.   dclstd,
  13.   designide,
  14.   DesignEditors}
  15.  
  16. //, DesignEditors
  17. //  RTLConsts, VCLEditors,
  18. //  DesignIntf,
  19. //   DesignEditors
  20.  
  21.   // DesignEditors
  22.   // DesignIntf
  23.   // DesignIDE
  24.   // DsgnIntf
  25.  
  26.  
  27. type
  28.   TBMPFilename = type string; // filename will have its owner property editor
  29.                               // Is this use for "type" documented anywhere?
  30. type
  31.   TBigBitmapViewer = class (TGraphicControl)
  32. ...
  33.  
Na konci je toto:
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.  
  36. end.
  37.  

Takže na konci je ten jeho editor a je tam registrační funkce. Tedy aby si zaregistroval ten svůj komponent.

Ale problém je, že používá TStringProperty k vytvoření toho sevého editoru ač je to jen jedno pitomé políčko a kvůli tomu to na svém D7 Personal nezkompiluji. To je ale absurdita.

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

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ěď #45 kdy: 19-07-2022, 10:30:51 »
Jen se hloupe zeptam: celé to vlákno je o rozchození komponenty na zobrazovani obrazku z roku 1998, Big Bitmap Viewer v.1.01 ?

"This component came about because I wanted to display 4000 x 4000 x 256 colour bitmaps (about 16MB in size). Using a TBitmap and a TImage took ages to load the images as a whole load of disc-swap file activity took place. The answer was to use a memory mapped file and the StretchDIBits API call which takes a memory pointer to the bitmap data, and doesn't realise (of course) that it's a memory mapped file. Load times and resource used drastically reduced."

Protože to je celé je nesmysl, TImage na obycejnem PC to zvládne bez problémů levou zadní ve zlomku vteřiny. Není rok 1998!
Embarcadero MVP - Czech republic

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 422
  • Karma: 0
    • Verze Delphi: 7
Re:Jak toto rozjet?
« Odpověď #46 kdy: 19-07-2022, 10:53:28 »
Stejně tam nemám ten DesignEditor (nebo možná mám v DesignIDE ale to je jedno). Ta knihovna BitView je zastaralá a jak teď koukám po netu CreateFileMapping nikdo nepoužívá, všichni používají na velké soubory streaming. Vzdávám to.

PS: Doufám, že DE nikdy nebudu potřebovat!

Díky všem za čas a energii, jdem dělat něco smysluplnějšího.

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 422
  • Karma: 0
    • Verze Delphi: 7
Re:Jak toto rozjet?
« Odpověď #47 kdy: 19-07-2022, 20:46:08 »
Rozchodil jsem Design Editor. Za cenu problémů, které jsem myslel že jsou způsobené něčím jiným. Restart PC, poškozený soubor? Delphi furt hlásilo chybu při kompilaci (nějaký soubor dll v delphi hlásil chybu), jenže po doinstalování souborů Debug a Editor obrázků jsem zjistil dvě věci:
Projekt od JaroB šel zkompilovat bez problémů. Balíček BitMapView jsem tedy nainstaloval a vyzkoušel.

Nakonec jsem Delphi odinstaloval a nainstaloval znova. Jenže, kde jsou nainstalované knihovny? Musím je instalovat znova? Fyzicky přítomné jsou, jenže Delphi je nevidí.

Nakonec jsem zjistil, že ten bug mi nešel zkompilovat projekt byl někde uvnitř projektu po jeho přejmenování... a přejmenování souborů. Snad to už pojede.