git-svn-id: https://svn.code.sf.net/p/kolmck/code@55 91bb2d04-0c0c-4d2d-88a5-bbb6f4c1fa07
This commit is contained in:
parent
d10f1e8d26
commit
5803254ad9
335
KOLmirrorReadme.txt
Normal file
335
KOLmirrorReadme.txt
Normal file
@ -0,0 +1,335 @@
|
||||
Mirror Classes Kit for the Key Objects Library, v2.89 [20-Mar-2010]
|
||||
Copyright (C) 1999-2007 by Vladimir Kladov
|
||||
-------------------------------------------------
|
||||
Delphi 2, 3, 4, 5, 6, 7 are supported.
|
||||
KOL iself is compatible also with Delphi8, BDS2005, BDS2006, BDS2010, Turbo-Delphi and with Free Pascal 1.0.5/2.x and higher (MCK-projects also can be compiled under Free Pascal, with some changes).
|
||||
Partially compatible with Kylix (to compile projects for Linux/Qt)
|
||||
|
||||
PLEASE, READ CAREFULLY THE *WARNINGS* AT THE END OF THIS FILE !
|
||||
|
||||
CONTENTS
|
||||
|
||||
I. INTRODUCTION
|
||||
II. INSTALLATION INSTRUCTIONS
|
||||
III. STARTING NEW KOL MIRROR PROJECT
|
||||
IV. ADDING A FORM
|
||||
V. REMOVING A FORM
|
||||
VI. RENAMING A FORM
|
||||
VII. WRITING MIRROR CODE
|
||||
VIII. ADDING REFERENCES TO A UNIT
|
||||
IX. USING TComponent DESCENDANT FROM VCL
|
||||
X. FILES CREATED AUTOMATICALLY
|
||||
XI. MAINTAINANCE
|
||||
XII. W A R N I N I N G S
|
||||
XIII. RESOLVING PROBLEMS
|
||||
XIV. ADDITIONALLY (Collapse)
|
||||
|
||||
I. INTRODUCTION
|
||||
|
||||
MCK is a kit of mirror classes for the VISUAL project development in Delphi environment using KOL library. (I will not explain here what is the KOL - refer on http://kolmck.net). Though from the beginning nor KOL, nor its predecessor XCL were not fit and intended for the visual development, therefore offers, ideas, questions and thoughts from many people on this cause enterred with the enviable regularity. Finally, after some thoughts, I come to a conclusion that it is possible for KOL to make it visual. And, in spite of the collapse of preceding attempt (project XCL Wizard, if who in the course - it has deprived more than half a year beside me), I decided to start the new project on. And though I myself repeatedly convinced my opponents that it's impossible... For four evenings to me, it seems to jerk it.
|
||||
|
||||
Essence of idea of "mirror classes" is concluded in following. For each visually isolated object of KOL library Delphi VCL component is created, which is registerred by usual way for Delphi components and it is placed on the palette of components. I use the term "visually isolated object" because the same (from formal standpoints) object type in KOL can implement of different visual elements. For instance, TControl can be either form, or button, or label, or any other dialogue element.
|
||||
|
||||
Designing of project in "mirror" classes consists in following two steps:
|
||||
- Placing two components TKOLProject and TKOLForm on the form, and running project first time to convert it into KOL-compliant. - When working with it at the design time as with usual VCL project, and when it is compiled, KOL objects are substituting corresponent mirror VCL objects, and application is very small.
|
||||
|
||||
+++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
++++++ The main difference of designing project for KOL using MCK from VCL are follows:
|
||||
|
||||
- You should not change properties of the form itself, excluding changing its size and position at design time. Change properties of TKOLForm component on it instead. Also, do not create events for a form itself, create events for TKOLForm component on it instead.
|
||||
|
||||
- You should not drop any non-MCK components and controls onto the form. Use only special MCK components designed for working with KOL project.
|
||||
|
||||
- Some of properties of MCK components are for design time only and such properties are not available at run-time. The most of such properties are named with small letters.
|
||||
|
||||
- To resolve a conflict between "Self" in VCL and "@Self" in KOL (which means the same), special word "Form" is introduced. It is implemented as a property, which returns at run-time pointer to a form (of type PControl), and is understanded at design time by Delphi compiler as a synonim of Self.
|
||||
Always use this word in event handlers, created at design time, as a substitute of pointer to a form. Do not write
|
||||
Caption := 'Hello!';
|
||||
Write instead:
|
||||
Form.Caption := 'Hello!';
|
||||
Therefore, controls and objects, placed onto form at design time, are available by the same way like in VCL. If You write
|
||||
Button1.Click;
|
||||
this will be interpreted as usual.
|
||||
|
||||
- painting of "mirror" controls at design-time now implemented schematic, but later it is possible to detailizy painiting, overriding Paint method of TKOLControl descendants. (Moreover, it is possible to switch between two painting methods by checking special property of TKOLProject component and to get other advantages - now not implemented yet).
|
||||
|
||||
+++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
++++++ All other notes are the same as for programming with KOL non-visually.
|
||||
|
||||
- Do not inherit your own descendants from TControl. If You want to change message processing for certain control (or form, or Applet object), use events (and the most power is OnMessage, which allows to filter all messages, passed to a control), or attach external handler (using AttachProc method).
|
||||
|
||||
- If You want to create quit different (new) object, not presented in KOL, inherit it from TObj object.
|
||||
|
||||
- it is offerred to solve possible conflicts between the alike name of types, procedures, functions, constants and variable in KOL and VCL on the following rule: 1. if name has same that on the sense a type, conflict does not appear. 2. if only names coincide, the accompaniment prefix <KOL.> will resolve a conflict completely (reference to KOL must be added in the uses clause FIRST that KOL declarations have a smaller priority in contrast with VCL declarations while code development at design time).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
See also Instructions below.
|
||||
|
||||
II. INSTALLATION INSTRUCTIONS
|
||||
|
||||
______________________
|
||||
DELPHI7 - INSTALLATION
|
||||
|
||||
1. Unpack files to the same folder, where You have KOL installed.
|
||||
2. Open MirrorKOLPackageD7.dpk in Delphi IDE and click 'Install'.
|
||||
|
||||
DELPHI7 - UPGRADING
|
||||
|
||||
1. Close all files in IDE: File|Close All
|
||||
2. Unpack files to the same folder, where You have KOL installed.
|
||||
3. Open MirrorKOLPackageD7.dpk in and in the pop-up menu (on the package window itself, on a separator between its toolbar and other content) select 'Build'. Or, in IDE main menu: Project | Build All or Project|Build MirrorKOLPackage... NEVER click 'Compile' - this is important !
|
||||
|
||||
______________________
|
||||
DELPHI6 - INSTALLATION
|
||||
|
||||
1. Unpack files to the same folder, where You have KOL installed.
|
||||
2. Open MirrorKOLPackageD6.dpk in Delphi IDE and click 'Install'.
|
||||
|
||||
DELPHI6 - UPGRADING
|
||||
|
||||
1. Close all files in IDE: File|Close All
|
||||
2. Unpack files to the same folder, where You have KOL installed.
|
||||
3. Open MirrorKOLPackageD6.dpk in and in the pop-up menu (on the package window itself, on a separator between its toolbar and other content) select 'Build'. Or, in IDE main menu: Project | Build All or Project|Build MirrorKOLPackage... NEVER click 'Compile' - this is important !
|
||||
|
||||
______________________
|
||||
DELPHI5 - INSTALLATION
|
||||
|
||||
1. Unpack files to the same folder, where You have KOL installed.
|
||||
2. Open MirrorKOLPackage.dpk in Delphi IDE and click 'Install'.
|
||||
|
||||
DELPHI5 - UPGRADING
|
||||
|
||||
1. Close all files in IDE: File|Close All
|
||||
2. Unpack files to the same folder, where You have KOL installed.
|
||||
3. Open MirrorKOLPackage.dpk in and in the pop-up menu (on the package window itself, on a separator between its toolbar and other content) select 'Build'. NEVER click 'Compile' - this is important ! (If such popup menu is not available, Close All and try open package again).
|
||||
|
||||
______________________
|
||||
DELPHI4 - INSTALLATION
|
||||
|
||||
1. Unpack files to the same folder, where You have KOL installed.
|
||||
2. Open MirrorKOLPackageD4.dpk in Delphi IDE and click 'Install'.
|
||||
|
||||
DELPHI4 - UPGRADING
|
||||
|
||||
1. Close all files in IDE: File|Close All
|
||||
2. Unpack files to the same folder, where You have KOL installed.
|
||||
3. Open MirrorKOLPackageD4.dpk in and in the pop-up menu (on the package window itself, on a separator between its toolbar and other content) select 'Build'. NEVER click 'Compile' - this is important ! (If such popup menu is not available, Close All and try open package again).
|
||||
|
||||
______________________
|
||||
DELPHI3 - INSTALLATION
|
||||
|
||||
1. Unpack files to the same folder, where You have KOL installed.
|
||||
2. Open MirrorKOLPackageD3.dpk in Delphi IDE and click 'Install'.
|
||||
|
||||
DELPHI3 - UPGRADING
|
||||
|
||||
1. Close all files in IDE: File|Close All
|
||||
2. Unpack files to the same folder, where You have KOL installed.
|
||||
3. Open MirrorKOLPackageD3.dpk in Delphi IDE, and in the pop-up menu (on the package window itself) select 'Build All'. NEVER click 'Compile' - this is important !
|
||||
|
||||
______________________
|
||||
DELPHI2 - INSTALLATION
|
||||
|
||||
1. Unpack files to the same folder, where You have KOL installed.
|
||||
2. Component|Install...|Add|Browse|mirror.pas|OK
|
||||
3. Component|Install...|Add|Browse|mckObjs.pas|OK
|
||||
4. Component|Install...|Add|Browse|mckCtrls.pas|OK
|
||||
|
||||
DELPHI2 - UPGRADING
|
||||
|
||||
1. Close all files in IDE: File|Close All
|
||||
2. Unpack files to the same folder, where You have KOL installed.
|
||||
3. Component|Install...|OK (earlier installed units mirror, mckObjs, mckCtrls should be seen already in a list)
|
||||
|
||||
|
||||
*
|
||||
***************
|
||||
*******************************
|
||||
|
||||
III. STARTING NEW KOL MIRROR PROJECT
|
||||
|
||||
*******************************
|
||||
***************
|
||||
*
|
||||
|
||||
1. Start Delphi and choose File|New Application.
|
||||
|
||||
2. DO NOT place any components on the form at this stage. Choose File|Save All and select the destination folder for your project. Note that ALL FILES of your project ALWAYS HAVE TO BE PLACED IN THE SAME DIRECTORY!
|
||||
You may change the name of the .PAS file, but you MUST NOT change the name of the .DPR file.
|
||||
|
||||
3. Place the TKOLProject component onto the form.
|
||||
|
||||
4. The name of the output MCK file can be set by changing the ProjectDest property (path MUST NOT be included). If you type MySuperKOLProj, for instance, then the output MCK project will be named MySuperKOLProj.DPR. The EXE file's name will be (as you might have guessed already) MySuperKOLProj.EXE.
|
||||
|
||||
5. Drop the TKOLForm component onto the form.
|
||||
|
||||
6. In DELPHI5 only: Project | Options | Directories/Conditionals | Search path, add:
|
||||
$(Delphi)\Source\ToolsApi
|
||||
(this only seems to be necessary when working with Delphi 5 - the compiler needs to know the path to toolintf.pas, dsgnintf.pas, editintf.pas and exptintf)
|
||||
|
||||
7. If TKOLForm component was dropped (5.) AFTER changing ProjectDest property of TKOLProject component (4.), this step is not necessary, and destination project is ready. Otherwise:
|
||||
change any property of the TKOLForm (or change the form's size or position). Even though no exe-file is created, you can open the resulting project immediately. This way allows you to convert a dll-project to a mck-compatible one as well.
|
||||
|
||||
8. Open the resulting project (it should be found in the same directory). Now it is high time you removed Project1.* - these files are no longer necessary.
|
||||
|
||||
9. Play with your new KOL/MCK Project (adjust Parameters, drop TKOL... components, compile, run, debug, etc.) Enjoy!
|
||||
|
||||
|
||||
IV. ADDING A FORM
|
||||
1. File|New form
|
||||
2. Save it IN THE SAME directory where project is located.
|
||||
3. Drop TKOLForm object onto it.
|
||||
4. Be sure that You have TKOLApplet component dropped on the main form.
|
||||
5. If AutoBuild is turned off: select TKOLProject component in main form and double click its property Build. (Otherwise, all should be done already, isn't it?)
|
||||
Answer Yes to all questions about reload changed files (if any).
|
||||
|
||||
V. REMOVING A FORM
|
||||
1. Project|Remove from project... as usual.
|
||||
2. Select TKOLProject, double click Build property. (Than OK, ... - if any).
|
||||
|
||||
VI. RENAMING A FORM
|
||||
|
||||
Do not rename form itself, instead change FormName property of TKOLForm component on a form. Remember, that main form (with TKOLProject component on it also must be opened in the designer).
|
||||
|
||||
VII. WRITING MIRROR CODE
|
||||
|
||||
Do not use names from VCL, especially from SysUtils, Classes, Forms, etc. All what You need, You should find in KOL.pas, Windows.pas, Messages.pas, ShellAPI.pas. And may be, write by yourself (or copy from another sources).
|
||||
When You write code in mirror project - usually place it in event handlers.
|
||||
You also can add any code where You wish but avoid changing first section of your mirror VCL form class declaration. And do not change auto-generated inc-files (marked as read-only by default).
|
||||
Always remember, that code, that You write in mirror project, must be accepted both by VCL and KOL. By VCL - at the stage of compiling mirror project (and this is necessary, because otherwise converting mirror project to reflected KOL project will not be possible). And by KOL - at the stage of compiling written code in KOL namespace.
|
||||
|
||||
THIS IS IMPORTANT:
|
||||
To resolve conflict between words VCL.Self and KOL.@Self, which are interpreted differently in KOL and VCL, special field is introduced - Form. In VCL, Form property of TKOLForm component "returns" Self, i.e. form object itself. And in KOL, Form:PControl is a field of object, containing resulting form object. Since this, it is correctly to change form's properties in following way:
|
||||
Form.Caption := 'Hello!';
|
||||
(Though old-style operator Caption := 'Hello!'; is compiled normally while converting mirror project to KOL, it will be wrong in KOL environment).
|
||||
But discussed above word Form is only to access form's properties - not its child controls. You access child controls and form event handlers by usual way. e.g.:
|
||||
Button1.Caption := 'OK';
|
||||
Button1Click( Form );
|
||||
END OF IMPORTANT PARAGRAPH.
|
||||
|
||||
It is possible to create several instances of the same form at run-time. And at least, it is possible to make form not AutoCreate, and create it programmatically when needed. Use global function NewForm1 (replacing Form1 with your mirror form name), for instance:
|
||||
TempForm1 := NewForm1( Applet );
|
||||
To make this possible, NEVER access global variable created in the unit during conversation, unless You know why You are doing so. Refer to Form variable instead.
|
||||
|
||||
VIII. ADDING REFERENCES TO A UNIT
|
||||
|
||||
If You want to add a reference to another psacal unit in uses clause of your form unit, insert it as follows:
|
||||
|
||||
====== CUT FROM TYPICAL UNIT WITH KOL FORM: ========
|
||||
{ KOL MCK } // Do not remove this line!
|
||||
{$DEFINE KOL_MCK}
|
||||
unit Unit1;
|
||||
|
||||
interface
|
||||
|
||||
{$IFDEF KOL_MCK}
|
||||
uses Windows, Messages, ShellAPI, KOL {$IFNDEF KOL_MCK}, mirror, Classes, Controls, mckControls, mckObjs, Graphics, mckCtrls {$ENDIF (place your units here->)}, <-- list of your units -->;
|
||||
{$ELSE}
|
||||
{$I uses.inc} mirror,
|
||||
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
||||
mirror;
|
||||
{$ENDIF}
|
||||
====== END OF CUT HERE ======
|
||||
|
||||
IX. USING TComponent DESCENDANT FROM VCL
|
||||
|
||||
Starting from MCK v0.71, it is possible to drop usual VCL-based components onto MCK form, and a code will be generated for proper creation and destructing these components. Please note, that therefore, using VCL-based components in KOL-MCK projects is not a good practice, because a lot of code which is not actually needed will be added to the executable.
|
||||
However, using of visual VCL components in MCK projects is not possible at all. Moreover, TKOLProject and TKOLForm components are immediately locked, when any such VCL control is found on form. This prevents its from functioning, but avoids any damage due erroneous dropping MCK components onto forms of normal VCL project.
|
||||
If VCL component is used in your MCK project, please note:
|
||||
- automatic code generation is not occur even if Autobuild is set to True in TKOLProject. Double click TKOLProject component (e.g.) to force code generation after You change some properties / assign events to the component.
|
||||
- when You drop the component onto MCK form at design time, Delphi adds a reference to its unit in uses clause of the form unit, but it is placed (usually) between {$IFNDEF KOL_MCK}...{$ENDIF} brackets, so the project can not be compiled. To correct this, go to the beginning of the unit, and move the reference to newly added unit as follows:
|
||||
..., SomeUnit {$ENDIF}; -> ... {$ENDIF} , SomeUnit;
|
||||
|
||||
|
||||
X. FILES CREATED AUTOMATICALLY
|
||||
|
||||
1. In addition to <YourProject>.dpr, following files are generated:
|
||||
- <YourProject>_0.inc - contains alternative application initialization code.
|
||||
Such code is running at run time instead of those generated
|
||||
by standard auto-completion between 'begin' and 'end'
|
||||
statements in dpr-file of the project. Structure is follows:
|
||||
|
||||
Applet := NewApplet( ... ); // if TKOLApplet is used only
|
||||
[ Applet.Visible := False; ] // optional
|
||||
[ Applet.OnMessage := ...; ] // optional
|
||||
|
||||
{$I <YourProject>_1.inc
|
||||
{$I <YourProject>_2.inc // automatic, form creation
|
||||
{$I <YourProject>_3.inc
|
||||
|
||||
Run( ... );
|
||||
|
||||
{$I <YourProject>_4.inc
|
||||
|
||||
- <YourProject>_1.inc - generated empty, if does not exist. You can alter it,
|
||||
placing here code, which executed at run time after Applet
|
||||
initialization. For instance, You can write here conditional
|
||||
operator 'if' to prevent further running of application
|
||||
in some cases.
|
||||
|
||||
- <YourProject>_2.inc - generated automatically, contains code to initializy
|
||||
auto-created forms. You should never alter it.
|
||||
|
||||
- <YourProject>_3.inc and <YourProject>_4.inc - like for <YourProject>_1.inc, it is generated empty only if it does not exist. Place here your code You wish.
|
||||
|
||||
|
||||
2. For every unit with form, additional file <UnitName>_1.inc is generated automatically. You should never change it manually.
|
||||
|
||||
3. File uses.inc also is generated automatically and You should not alter it manually. It contains word 'uses' only, included to final code via directive {$I uses.inc}.
|
||||
|
||||
XI. MAINTAINANCE
|
||||
For backup / copy purposes, following files are necessary to be stored to restore your project later or in another directory (on another PC):
|
||||
<YourProject>.dpr
|
||||
<YourProject>_1.dpr - if You altered it
|
||||
<YourProject>_3.dpr - if You altered it
|
||||
<YourProject>_4.dpr - if You altered it
|
||||
<YourProject>.res - if You use app icon and altered it
|
||||
<YourUnit>.pas - for every unit
|
||||
<YourUnit>.dfm - for every unit with form
|
||||
<YourProject>.cfg
|
||||
<YourProject>.dof
|
||||
other files, created specially for a project (*.rc;*.res;*.bmp;*.ico; etc.)
|
||||
|
||||
Files could be recreated, but desired for backup / copy:
|
||||
<YourProject>_0.inc
|
||||
<YourProject>_2.inc
|
||||
<YourUnit>_1.inc - for every unit
|
||||
<YourProject>.dsk
|
||||
<YourProject>.drc
|
||||
|
||||
And following files You are free to remove any time You wish:
|
||||
*.dcu; *.~*; *.$$$; *.exe [ :) ]
|
||||
|
||||
##############################
|
||||
# #
|
||||
######### XII. W A R N I N I N G S ###########
|
||||
# #
|
||||
##############################
|
||||
|
||||
1. Never drop TKOLProject (and other KOL mirror components) on a form of normal VCL project. Never drop VCL controls onto MCK forms (though non-visual components are allowed). In both cases TKOLForm / TKOLProject components become locked and not functioning. To unlock these, You should first remove all VCL controls from the form, and then change Locked property to False for locked component(s).
|
||||
2. Do not touch in converted project units all between automatically generated {$IF[N]DEF}...{$ENDIF}.
|
||||
3. Don't edit automatically generated inc-files.
|
||||
4. If You turned on console (property TKOLProject.ConsoleOut), NEVER CLOSE it. Instead, assign False to this property again.
|
||||
5. Store mirror KOL projects at least in other folder(s), than usual VCL projects.
|
||||
6. While upgrading to newer version of MCK, always use Build but not Compile - this is important!
|
||||
7. If anything will be damaged on Your computer, remember, that author of this software IS NOT RESPONSIBLE for such loss IN ANY WAY.
|
||||
|
||||
XIII. RESOLVING PROBLEMS
|
||||
|
||||
1. If you had no success installing MCK, read INSATALLATION INSTRUCTIONS carefully. E.g., take in attention, what package you install: may be, you have another Delphi version.
|
||||
2. There are no problem with installing MCK in Delphi, no matter, what Delphi edition you use (e.g., Enterprise or Personal). You still have problems? Read instruction, please.
|
||||
3. If you receive a message what ToolsApi or DsgnIntf not found, some syntax errors are found (though you did not yet write any code) or something similar occur: please read section "STARTING NEW KOL MIRROR PROJECT" carefully once again. May be, the reason is that you try to compile and run source project, though destination one should be opened instead, obtained in result of executing items 1 to 7.
|
||||
4. Something more is not OK? May be, you missed something reading instructions, sorry.
|
||||
5. Yes, certainly, any thing can have place. Try to do an experiment in ideal circumstances: install Delpi again (or on another PC), and try to do all exactly as it is said in instructions, step by step. Sure, all must be OK.
|
||||
6. Just in case: system.dcu replacement package files must not be installed together with other files of KOL and MCK. Place it in another directory, please.
|
||||
|
||||
XIV. ADDITIONALLY:
|
||||
|
||||
Collapse - is a technology used in KOL (mainly with MCK) to make code even smaller by replacing part of machine code with more compact byte-code of the virtual Forth-like two-stacks "machine". MCK provides generation of P-code parallel to the generation of Pascal code for forms initialization. Then turning on some special options such P-code is compiled into some assembler code wich then become ready to execute byte-code. Effect appear for large enough projects, since though byte-code smaller about twice in comparison to the machine code, some additional procedures (including byte-code emulaor) should be added first. More detailed see in the Collapse package on the site.
|
||||
|
||||
-----------------------------------------------------------------
|
||||
http://kolmck.net
|
||||
vk@kolmck.net
|
||||
|
||||
-----------------------------------------------------------------
|
||||
(C) 2000-2010, Vladimir Kladov. All rights reserved.
|
315
KOLmirrorReadme_rus.txt
Normal file
315
KOLmirrorReadme_rus.txt
Normal file
@ -0,0 +1,315 @@
|
||||
Mirror Classes Kit для Key Objects Library, v2.89 [20 марта 2010г.]
|
||||
Copyright (C) 1999-2007 by Vladimir Kladov
|
||||
-------------------------------------------------
|
||||
Поддерживает Delphi 2, 3, 4, 5, 6, 7
|
||||
KOL совместима так же с Delphi 8, BDS 2005, 2006, 2010, Turbo-Delphi и с Free Pascal 1.0.5/2.x (MCK-проекты, изготовленные в Delphi, так же компилируются с Free Pascal)
|
||||
KOL частично совместима с Kylix/FPC для компиляции под Linux с использованием Qt
|
||||
|
||||
ПОЖАЛУЙСТА, ВНИМАТЕЛЬНО ПРОЧИТАЙТЕ ПРЕДУПРЕЖДЕНИЯ В КОНЦЕ ЭТОГО ФАЙЛА!
|
||||
И ОСОБЕННО ОБРАТИТЕ ВНИМАНИЕ НА РАЗДЕЛ "РАЗРЕШЕНИЕ ПРОБЛЕМ", если у вас возникли какие-либо проблемы с установкой или использованием MCK.
|
||||
|
||||
СОДЕРЖАНИЕ
|
||||
|
||||
I. ВВЕДЕНИЕ
|
||||
II. УСТАНОВКА
|
||||
III. НАЧАЛО НОВОГО ЗЕРКАЛЬНОГО ПРОЕКТА
|
||||
IV. ДОБАВЛЕНИЕ ФОРМЫ
|
||||
V. УДАЛЕНИЕ ФОРМЫ
|
||||
VI. ПЕРЕИМЕНОВАНИЕ ФОРМЫ
|
||||
VII. НАПИСАНИЕ ЗЕРКАЛЬНОГО КОДА
|
||||
VIII. ДОБАВЛЕНИЕ ССЫЛКИ НА МОДУЛЬ
|
||||
IX. ИСПОЛЬЗОВАНИЕ НАСЛЕДНИКОВ TComponent ИЗ VCL
|
||||
X. АВТОМАТИЧЕСКИ ГЕНЕРИРУЕМЫЕ ФАЙЛЫ
|
||||
XI. MAINTAINANCE (КОПИРОВАНИЕ ФАЙЛОВ ПРОЕКТА)
|
||||
XII. ПРЕДУПРЕЖДЕНИЯ
|
||||
XIII. РАЗРЕШЕНИЕ ПРОБЛЕМ
|
||||
XIV. ДОПОЛНИТЕЛЬНО (Collapse)
|
||||
|
||||
I. ВВЕДЕНИЕ
|
||||
|
||||
MCK (Mirror Classes Kit) - это набор зеркальных классов для ВИЗУАЛЬНОЙ разработки проекта в среде Delphi с использованием библиотеки KOL. (Что такое KOL - здесь разъяснять не буду, отсылаю на http://www.kolmck.net). Хотя изначально ни KOL, ни ее предшественник XCL для визуальной разработки не годились и предназначены не были, предложения, идеи, вопросы и мысли от разрличных людей по этому поводу поступали с завидной регулярностью. Наконец, поразмыслив, я пришел к выводу, что все-таки реализовать визуальность для KOL возможно. И, несмотря на провал предыдущей попытки (проект XCL Wizard, если кто в курсе - он отнял у меня более полугода), я решился на новый проект. И хотя я сам неоднократно убеждал своих оппонентов в том, что это невозможно... За четыре вечера мне, кажется удалось совершить этот рывок.
|
||||
|
||||
Суть идеи "зеркальных классов" заключается в следующем. Для каждого визуально обособленного объекта библиотеки KOL создается компонент Delphi, который регистрируется обычным для компонента Delphi способом и размещается на палитре компонентов. Термин "визуально обособленный" я использую потому, что один и тот же (с формальной точки зрения) объектный тип в KOL может выполнять функции различных визуальных элементов. Например, TControl может быть и формой, и кнопкой, и меткой, и вообще каким угодно диалоговым элементом.
|
||||
|
||||
Проектирование в "зеркальных" классах состоит в том, что на этапе времени разработки (design-time) на форме размещается необходимое число зеркальных компонентов, настраиваются их свойства и события, пишется код обработчиков событий и делается все остальное, что нужно делать на этом этапе. При запуске полученного проекта... (и это новое)... генерируется код, который не содержит никаких обращений к классам VCL, и использует только возможности KOL. Этот код может быть запущен и отлажен самостоятельно или под отладчиком IDE. То есть, после начального создания проекта KOL согласно прилагаемым ниже инструкциям нет никакой необходимости переключаться в зеркальный проект - сам целевой проект является зеркальным. В том смысле, что во время разработки он ведет себя как визуальный, а после компиляции превращается в... чистый от VCL.
|
||||
|
||||
Описанный выше способ нисколько не сложнее того, к которому мы привыкли. Однако, результат превосходит все ожидания! Размер полученного приложения иногда в десять и более раз меньше аналогичного VCL-приложения, исполняется оно намного быстрее и ресурсов потребляет намного меньше, что действительно важно.
|
||||
|
||||
То, что есть на данном этапе - уже НЕ макет, а годный к ПРАКТИЧЕСКОМУ ИСПОЛЬЗОВАНИЮ инструмент, который прекрасно выполняет поставленную задачу (его, конечно, можно совершенствовать, но это не должно мешать главной цели - его использованию).
|
||||
Основные отличие при программировании для KOL с MCK (от программирования в VCL) следующие:
|
||||
|
||||
- Не следует изменять свойства самой формы, кроме изменения ее размеров и позиции. Вместо этого изменяйте свойства объекта (компонента) TKOLForm, лежащего на ней. То же касается обработчиков событий. События, относящиеся к форме, назначайте для компонента TKOLForm!
|
||||
|
||||
- Не следует бросать на форму не-MCK компоненты и визуальные объекты. Работать можно только с компонентами, входящими в состав MCK.
|
||||
|
||||
- Некоторые свойства MCK-компонентов специально предназначены для времени проектирования и недоступны во время исполнения. Обычно названия таких свойств начинаются со строчной буквы.
|
||||
|
||||
- Для разрешения конфликта между VCL.Self и KOL.@Self введено заменяющее слово Form, которое требуется теперь использовать при написании кода в зеркальном проекте как синоним @Self для формы. На этапе разработки Form "как бы возвращает" Self (как бы - потому что этот код никогда не компилируется и не исполняется). После конверсии проекта Form ссылается теперь на объект формы (Form теперь является полем объекта, содержащего форму и ее дочерние объекты, и имеет тип PControl - в полном соответствии с требованиями KOL).
|
||||
Таким образом, не следует писать в обработчике события
|
||||
Caption := 'Привет';
|
||||
Такой код не будет скомпилирован. Вместо этого следует писать:
|
||||
Form.Caption := 'Привет';
|
||||
|
||||
- локальные в VCL-форме компоненты, брошенные на нее во время разработки, одинаково "видны" в результирующем проекте KOL, хотя и не являются членами класса формы. Так происходит потому, что обработчики событий в "отраженном" проекте становятся методами того же объектного типа, членами которого теперь являются "образы" компонентов - визуальные и невизуальные объекты, "принадлежащие" форме.
|
||||
Примечание. Сия замысловатая фраза означает, что можно написать в обработчике события Button1, и это будет воспринято именно так, как Вы подумали.
|
||||
|
||||
- визуальное отображение контролов на этапе разработки (design-time) выполняется схематически, но позже (ещ позже) несложно может быть смоделировано более тщательное отображение путем переопределения процедуры Paint в каждом из зеркальных классов. (Более того, появляется потенциальная возможность менять визуальное представление объектов на форме простым изменением соответствующего (design-time-only) свойства в компоненте TKOLProject, или получать от этого дополнительные выгоды, что пока не реализовано).
|
||||
|
||||
- возможные конфликты между одинаковым наименованием типов, процедур, функций, констант и переменных в KOL и VCL предлагается решать по следующему правилу: 1. если имя имеет тождественный по смыслу тип, конфликт не возникает. 2. если совпадает только имя, то добавление уточняющего префикса <KOL.> устранит конфликт полностью (ссылка на KOL должна быть добавлена в директиву uses ПЕРВОЙ, чтобы объявления KOL имели меньший приоритет по сравнению с объявлениями VCL на этапе разработки кода в исходном проекте. Впрочем, такое добавление ссылки на KOL делается автоматически).
|
||||
|
||||
II. УСТАНОВКА
|
||||
___________________________________
|
||||
DELPHI7 - УСТАНОВКА
|
||||
|
||||
1. Распаковать файлы в ту же директорию, в которой установлен KOL.
|
||||
2. Открыть MirrorKOLPackageD7.dpk в Delphi IDE и нажать 'Install'.
|
||||
|
||||
DELPHI7 - ПЕРЕУСТАНОВКА (UPGRADE)
|
||||
|
||||
1. Во избежание возможных неприятностей, закрыть все файлы в IDE (File|Close All).
|
||||
2. Распаковать файлы в ту же директорию, в которой установлен KOL.
|
||||
3. Открыть MirrorKOLPackageD7.dpk в Delphi IDE и в выпадающем меню на самом пакете (разделитель под панелью кнопок) нажать 'Build' или в меню IDE: Project | Build All или Project | Build MirrorKOLPackageD7 (если пакет уже установлен, кнопка 'Install' должна быть недоступна). Ни в коем случае не использовать Compile.
|
||||
|
||||
___________________________________
|
||||
DELPHI6 - УСТАНОВКА
|
||||
|
||||
1. Распаковать файлы в ту же директорию, в которой установлен KOL.
|
||||
2. Открыть MirrorKOLPackageD6.dpk в Delphi IDE и нажать 'Install'.
|
||||
|
||||
DELPHI6 - ПЕРЕУСТАНОВКА (UPGRADE)
|
||||
|
||||
1. Во избежание возможных неприятностей, закрыть все файлы в IDE (File|Close All).
|
||||
2. Распаковать файлы в ту же директорию, в которой установлен KOL.
|
||||
3. Открыть MirrorKOLPackageD6.dpk в Delphi IDE и в выпадающем меню на самом пакете (разделитель под панелью кнопок) нажать 'Build' или в меню IDE: Project | Build All или Project | Build MirrorKOLPackageD6 (если пакет уже установлен, кнопка 'Install' должна быть недоступна). Ни в коем случае не использовать Compile.
|
||||
|
||||
___________________________________
|
||||
DELPHI5 - УСТАНОВКА
|
||||
|
||||
1. Распаковать файлы в ту же директорию, в которой установлен KOL.
|
||||
2. Открыть MirrorKOLPackage.dpk в Delphi IDE и нажать 'Install'.
|
||||
|
||||
DELPHI5 - ПЕРЕУСТАНОВКА (UPGRADE)
|
||||
|
||||
1. Во избежание возможных неприятностей, закрыть все файлы в IDE (File|Close All).
|
||||
2. Распаковать файлы в ту же директорию, в которой установлен KOL.
|
||||
3. Открыть MirrorKOLPackage.dpk в Delphi IDE и в выпадающем меню на самом пакете (разделитель под панелью кнопок) нажать 'Build' (если если меню не доступно, закрыть все и открыть пакет снова, возможно, следует использовать File | Open, и не использовать Reopen). Ни в коем случае не использовать Compile.
|
||||
|
||||
___________________________________
|
||||
DELPHI4 - УСТАНОВКА
|
||||
|
||||
1. Распаковать файлы в ту же директорию, в которой установлен KOL.
|
||||
2. Открыть MirrorKOLPackageD4.dpk в Delphi IDE и нажать 'Install'.
|
||||
|
||||
DELPHI4 - ПЕРЕУСТАНОВКА (UPGRADE)
|
||||
1. Во избежание возможных неприятностей, закрыть все файлы в IDE (File|Close All).
|
||||
2. Распаковать файлы в ту же директорию, в которой установлен KOL.
|
||||
3. Открыть MirrorKOLPackaged4.dpk в Delphi IDE и в выпадающем меню на самом пакете (разделитель под панелью кнопок) нажать 'Build' (если если меню не доступно, закрыть все и открыть пакет снова, возможно, следует использовать File | Open, и не использовать Reopen). Ни в коем случае не использовать Compile.
|
||||
|
||||
___________________________________
|
||||
DELPHI3 - УСТАНОВКА
|
||||
|
||||
1. Распаковать файлы в ту же директорию, в которой установлен KOL.
|
||||
2. Открыть MirrorKOLPackageD3.dpk в Delphi IDE и нажать 'Install'.
|
||||
|
||||
DELPHI3 - ПЕРЕУСТАНОВКА (UPGRADE)
|
||||
1. Во избежание возможных неприятностей, закрыть все файлы в IDE (File|Close All).
|
||||
2. Распаковать файлы в ту же директорию, в которой установлен KOL.
|
||||
3. Открыть MirrorKOLPackageD3.dpk в Delphi IDE и в выпадающем меню на самом пакете (разделитель под панелью кнопок) нажать 'Build All' (если если меню не доступно, закрыть все и открыть пакет снова, возможно, следует использовать File | Open, и не использовать Reopen). Ни в коем случае не использовать Compile.
|
||||
|
||||
___________________________________
|
||||
DELPHI2 - УСТАНОВКА
|
||||
|
||||
1. Распаковать файлы в ту же директорию, в которой установлен KOL.
|
||||
2. Component|Install...|Add|Browse|mirror.pas|OK
|
||||
3. Component|Install...|Add|Browse|mckObjs.pas|OK
|
||||
4. Component|Install...|Add|Browse|mckCtrls.pas|OK
|
||||
|
||||
DELPHI2 - ПЕРЕУСТАНОВКА (UPGRADE)
|
||||
1. Во избежание возможных неприятностей, закрыть все файлы в IDE (File|Close All).
|
||||
2. Распаковать файлы в ту же директорию, в которой установлен KOL.
|
||||
3. Component|Install...|OK (установленные ранее модули mirror, mckObjs, mckCtrls уже должны быть видны в списке)
|
||||
|
||||
|
||||
III. НАЧАЛО НОВОГО ЗЕРКАЛЬНОГО ПРОЕКТА
|
||||
|
||||
1. В IDE Delphi: File|NewApplication.
|
||||
|
||||
2. Не бросать пока никакие компоненты на форму. Из меню выполнить File|Save All, выбрать папку для сохранения зеркального проекта и его модулей, и сохранить проект (два файла). ВСЕ МОДУЛИ проекта ВСЕГДА должны находиться В ОДНОЙ ДИРЕКТОРИИ!
|
||||
Внимание! Не называйте dpr-файл именем конечного проекта. Пусть он останется пока с именем Project1 (например). Назовите главный модуль (Unit1.pas) так, как он будет называться в проекте.
|
||||
|
||||
3. Бросить TKOLProject на форму.
|
||||
|
||||
4. Изменить свойство ProjectDest (это имя результирующего проекта, здесь как раз можно ввести "настоящее" имя проекта, т.е. его dpr-файла, без расширения или указания пути - ввести следует только идентификатор).
|
||||
|
||||
5. Бросить на форму компонент TKOLForm.
|
||||
|
||||
6. В Delphi5 (только), необходимо теперь прописать в опциях САМОГО ПРОЕКТА путь к сервисным модулям:
|
||||
Project | Options | Directories/Conditionals | Search path
|
||||
и вписать сюда: $(Delphi)\Source\ToolsApi
|
||||
(возможно ввести этот путь в список Library path в Tools | Environment options | Library один раз, чтобы больше не заботиться об этом).
|
||||
|
||||
7. Если TKOLForm был брошен (5.) ПОСЛЕ изменения свойства TKOLProject.projectDest (4.), данный шаг не нужен, и результирующий проект готов (переходим к п.8).
|
||||
Иначе:
|
||||
измените в свойствах формы (TKOLForm), например, ее размер. Хотя exe-файл и не создается, результирующий проект при этом формируется, и готов к тому, чтобы его открыть.
|
||||
|
||||
8. Откройте полученный проект (в той же директории, имя - то, которое было задано в KOLProject1.ProjectDest). Файлы Project1.* можно со спокойной совестью удалить.
|
||||
|
||||
9. А вот теперь Вы имеете проект KOL/MCK. Можно бросать на форму зеркальные контролы из палитры (закладка KOL), настраивать их, назначать события, кодировать... Запускать, отлаживать. Короче, Банзай! т.е. Enjoy!
|
||||
|
||||
IV. ДОБАВЛЕНИЕ ФОРМЫ
|
||||
1. File|New form
|
||||
2. Сохранить ее В ТУ ЖЕ ДИРЕКТОРИЮ, где лежат остальные файлы проекта.
|
||||
3. Бросить на форму компонент TKOLForm. (Убедиться так же, что на главной форме уже лежит TKOLApplet, если нет - положить).
|
||||
4. Собственно, все. Если в TKOLProject свойство AutoBuild = True (по умолчанию), то через BuildDelay микросекунд форма превратится в KOL-совместимую. Если нет, надо сделать двойной щелчок по свойству Build компонента TKOLProject (на главной форме).
|
||||
|
||||
V. УДАЛЕНИЕ ФОРМЫ
|
||||
1. Project|Remove from prject... - как обычно
|
||||
2. В главной форме выделить TKOLProject, двойной щелчок по свойству Build.
|
||||
|
||||
VI. ПЕРЕИМЕНОВАНИЕ ФОРМЫ
|
||||
Не изменяйте имя формы, вместо этого измените свойство FormName компонента TKOLForm, лежащего на этой форме. (Главная форма тоже должна быть открыта).
|
||||
|
||||
VII. НАПИСАНИЕ ЗЕРКАЛЬНОГО КОДА
|
||||
|
||||
Если имена методов, процедур, переменных, типов, констант и т.д. будут конфликтовать с именами из VCL, добавляйте префикс <KOL.> для разрешения конфликтов.
|
||||
Не используйте имена из VCL, особенно из SysUtils, Classes, Forms, Dialogs и т.д. Все, что нужно для программирования, можно найти в самом KOL, а так же в Windows.pas, Messages.pas, ShellAPI.pas. Или написать самим (либо скопировать откуда-нибудь).
|
||||
Когда Вы пишете зеркальный код, обычно он размещается в обработчиках событий.
|
||||
Вы можете так же добавлять любой код (требуемые процедуры, функции, переменные, константы, типы и т.д. где угодно, кроме автоматически генерируемых inc-файлов и первой секции в декларации класса зеркальной формы), а так же добавлять ссылки на внешние модули в кластерах uses.
|
||||
При написании кода всегда следует помнить, что хотя он пишется для среды KOL, он должен быть синтаксически верен и в VCL. Иначе просто не дойдет до компиляции кода.
|
||||
ЭТО ВАЖНО:
|
||||
Для разрешения конфликта между словом Self из VCL и словом @Self в KOL, которые интерпретируются по-разному, введено специальное слово Form. В VCL-проекте (зеркале) Form - это свойство компонента TKOLForm, возвращающее Self. В KOL-проекте - это поле объекта с именем исходной формы, и является указателем на объект самой формы. Так что, для корректного обращения к свойствам формы из назначенного обработчика в обоих случаях правильно будет звучать:
|
||||
Form.Caption := 'Hello!';
|
||||
(В то же время старый стиль Caption := 'Hello!'; выдаст ошибку в сконвертированном KOL-проекте при попытке компиляции).
|
||||
Но предлагаемое слово Form следует использовать только для доступа к свойствам формы. Для доступа к дочерним объектам формы оно не требуется (и неверно). Надо, как обычно:
|
||||
Button1.Caption := 'OK';
|
||||
Button1Click( Form );
|
||||
конец ЭТО ВАЖНО.
|
||||
Возможно создание нескольких экземпляров той же самой формы во время исполнения (run-time). По крайней мере, это полезно для динамического создания форм, которые не создаются автоматически (Project|Options|Forms, только не надо делать динамической главную форму). Используйте глобальную функцию NewForm1 (заменяя <Form1> именем своей формы), например:
|
||||
TempForm1 := NewForm1( Applet );
|
||||
Чтобы такое было возможным, НИКОГДА не используйте глобальную переменную, выделенную для формы при генерации проекта, если только Вы не знаете точно, зачем это надо. Используйте слово Form вместо нее.
|
||||
|
||||
VIII. ДОБАВЛЕНИЕ ССЫЛКИ НА МОДУЛЬ
|
||||
|
||||
Если необходимо использовать внешний модуль, не перечисленный в директиве uses, добавьте его как показано в приведенном отрывке:
|
||||
|
||||
====== НАЧАЛО ТИПИЧНОГО МОДУЛЯ, СОДЕРЖАЩЕГО ФОРМУ KOL: ========
|
||||
{ KOL MCK } // Do not remove this line!
|
||||
{$DEFINE KOL_MCK}
|
||||
unit Unit1;
|
||||
|
||||
interface
|
||||
|
||||
uses Windows, Messages, ShellAPI, KOL {$IFNDEF KOL_MCK}, mirror, Classes, Controls, mckControls, mckObjs, Graphics,
|
||||
mckCtrls {$ENDIF (place your units here->)}, <-- список имен дополнительных модулей -->
|
||||
{$ELSE}
|
||||
{$I uses.inc} mirror,
|
||||
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
||||
mirror;
|
||||
{$ENDIF}
|
||||
====== КОНЕЦ ОТРЫВКА ======
|
||||
|
||||
IX. ИСПОЛЬЗОВАНИЕ НАСЛЕДНИКОВ TComponent ИЗ VCL
|
||||
|
||||
Начиная с версии MCK v0.71, возможно использовать невизуальные компоненты, основанные на VCL, в визуальных проектах KOL+MCK. Для них будет сгенерирован код, их конструирующий, и разрушающий, присвоены события и те свойства, которые отличаются от присваиваемых в конструкторе.
|
||||
Тем не менее, использование компонентов VCL в проектах, основанных на KOL, не рекомендуется, так как в любом случае они потянут за собой очень большой объем неиспользуемого кода.
|
||||
В то же время, использование визуальных компонентов VCL в проекта MCK невозможно вообще. Компоненты TKOLProject и TKOLForm блокируются немедленно в случае обнаружения таких объектов на форме, что предотвращает порчу VCL-проектов в случае ошибочного бросания компонентов MCK на форму обычного VCL-проекта.
|
||||
Если VCL компонент используется в проекте MCK, учтите, что:
|
||||
- автоматическая генерация кода не происходит, когда свойства такого компонента изменяются или ему назначаются обработчики событий. Следует (например) двойным щелчком по компоненту TKOLProject форсировать генерацию кода после внесения каких-либо изменений в настройку чужеродного компонента.
|
||||
- когда VCL компонент "брошен" на форму, Delphi добавляет ссылку на его модуль в кластер uses, но она оказывается обычно помещена между скобками {$IFNDEF KOL_MCK}...{$ENDIF}, так что проект не может быть нормально откомпилирован. Чтобы исправить это, перенесите ссылку на модуль за скобки:
|
||||
..., SomeUnit {$ENDIF}; -> ... {$ENDIF} , SomeUnit;
|
||||
|
||||
X. АВТОМАТИЧЕСКИ ГЕНЕРИРУЕМЫЕ ФАЙЛЫ
|
||||
|
||||
1. В дополнение к <YourProject>.dpr, генерируются файлы:
|
||||
- <YourProject>_0.inc - содержит альтернативный код инициализации приложения,
|
||||
замещающий собой то, что находится в dpr-файле между
|
||||
begin и end. Структура примерно следующая:
|
||||
|
||||
Applet := NewApplet( ... ); // если используется TKOLApplet
|
||||
[ Applet.Visible := False; ] // опционально
|
||||
[ Applet.OnMessage := ...; ] // опционально
|
||||
|
||||
{$I <YourProject>_1.inc}
|
||||
|
||||
{$I <YourProject>_2.inc} // автоматический, создает формы
|
||||
|
||||
{$I <YourProject>_3.inc}
|
||||
|
||||
Run( ... );
|
||||
|
||||
{$I <YourProject>_4.inc}
|
||||
|
||||
- <YourProject>_1.inc - создается пустым, если не существует. Вы можете изменять
|
||||
его, помещая в него код, который сработает немедленно после
|
||||
(опциональной) инициализации переменной Applet. Например,
|
||||
здесь можно написать условный оператор, который предотвратит
|
||||
дальнейший запуск приложения в некоторых случаях.
|
||||
|
||||
- <YourProject>_2.inc - генерируется автоматически, содержит код инициализации
|
||||
автоматически создаваемых форм. Никогда не модифицируйте
|
||||
его.
|
||||
|
||||
- <YourProject>_3.inc и <YourProject>_4.inc - так же, как и <YourProject>_1.inc, генерируется пустым, если не существует. Размещайте в нем свой код (любой).
|
||||
|
||||
тут уже просто некогда было перевести... но это не так важно:
|
||||
|
||||
2. For every unit with form, additional file <UnitName>_1.inc is generated automatically. You should never change it manually.
|
||||
|
||||
3. File uses.inc also is generated automatically and You should not alter it manually. It contains word 'uses' only, included to final code via directive {$I uses.inc}.
|
||||
|
||||
XI. MAINTAINANCE
|
||||
For backup / copy purposes, following files are necessary to be stored to restore your project later or in another directory (on another PC):
|
||||
<YourProject>.dpr
|
||||
<YourProject>_1.dpr - if You altered it
|
||||
<YourProject>_3.dpr - if You altered it
|
||||
<YourProject>_4.dpr - -||-
|
||||
<YourProject>.res - if You use app icon and altered it
|
||||
<YourUnit>.pas - for every unit
|
||||
<YourUnit>.dfm - for every unit with form
|
||||
<YourProject>.cfg
|
||||
<YourProject>.dof
|
||||
other files, created specially for a project (*.rc;*.res;*.bmp;*.ico; etc.)
|
||||
|
||||
Files could be recreated, but desired for backup / copy:
|
||||
<YourProject>_0.inc
|
||||
<YourProject>_2.inc
|
||||
<YourUnit>_1.inc - for every unit
|
||||
<YourProject>.dsk
|
||||
<YourProject>.drc
|
||||
|
||||
And following files You are free to remove any time You wish:
|
||||
*.dcu; *.~*; *.$$$; *.exe
|
||||
|
||||
######################################
|
||||
# #
|
||||
# XII. П Р Е Д У П Р Е Ж Д Е Н И Е #
|
||||
# #
|
||||
######################################
|
||||
1. Никогда не бросайте TKOLProject (и другие KOL-компоненты) на форму нормального VCL-проекта - они будут заблокированы и не будут функционировать.
|
||||
2. В модулях полученного KOL/MCK проекта не трогайте все, что лежит между автоматически добавленными {$IF[N]DEF}...{$ENDIF}.
|
||||
3. Не надо пытаться редактировать автоматически генерируемые INC-файлы.
|
||||
4. Если Вы включили консоль (св-во ConsoleOut обьекта TKOLProject), НЕ ЗАКРЫВАЙТЕ ее. Просто смените значение ConsoleOut в False.
|
||||
5. Сохраняйте зеркальные проекты по крайней мере в другой директории, чем обычные проекты VCL - во избежание каких-либо потенциальных совпадений имен модулей.
|
||||
6. Прт обновлении до более свежей версии выполняйте Build (а не Compile!) для всех пакетов, зависящих от MCK.
|
||||
6. Если у Вас на компьютере что-нибудь испортится, помните - разработчик в соответствии с лицензионным соглашением НЕ НЕСЕТ НИКАКОЙ ответственности.
|
||||
|
||||
XIII. РАЗРЕШЕНИЕ ПРОБЛЕМ
|
||||
|
||||
1. Если у вас не получилось установить MCK, прочитайте инструкцию по установке еще раз. Например, обратите внимание, тот ли пакет вы пытаетесь установить: может быть, у вас другая версия Delphi.
|
||||
2. Нет никаких проблем с установкой MCK в Delphi, независимо от того, какая у вас редакция: Enterprise или Personal. У вас проблемы? Прочитайте инструкцию, пожалуйста.
|
||||
3. Если при попытке компиляции вы получаете сообщение о том, что не найдены файлы ToolsAPI (DsgnIntf например), обнаруживается синтаксическая ошибка в коде (хотя вы еще не писали код), или еще что-нибудь в этом духе, прочитайте еще раз раздел "НАЧАЛО НОВОГО ЗЕРКАЛЬНОГО ПРОЕКТА". Чаще всего ошибка в том, что вы пытаетесь откомпилировать и запустить исходный проект, тогда как следовало его закрыть и открыть тот, который сформировался в результате выполнения п.п. 1-7.
|
||||
4. Еще что-то не получается? Вы, наверное, не читали инструкцию. Извините :)
|
||||
5. Нет, конечно, всякие вещи возможны. Но попробуйте провести чистый эксперимент. Установите Delphi заново (или на другой машине) и попробуйте сделать все согласно инструкции, шаг за шагом. Уверяю вас, все получится.
|
||||
6. На всякий случай: пакет замены system.dcu не должен устанавливаться в ту же директорию, где расположены файлы самих KOL и MCK.
|
||||
|
||||
XIV. ДОПОЛНИТЕЛЬНО
|
||||
|
||||
Collapse - это технология, используемая в KOL (прежде всего с MCK) для того, еще более уменьшить код путем замены части машинного кода более компактным байт-кодом виртуальной форт-подобной двухстековой машины. MCK обеспечивает генерацию П-кода параллельно генерации Паскаль-кода для инициализации форм. Далее при включении соответствующих опций этот П-код превращается в некоторый код на ассемблере, и после компиляции в Delphi обычным образом становится исполнимым байт-кодом П-машины. Эффект уменьшения проявляется для достаточно больших проектов, так как хотя байт-код примерно вдвое меньше по размеру по сравнению с машинным, сначала должно быть добавлено некоторое количество дополнительных процедур (и в том числе эмулятор П-машины). Более подробно см. пакет Collapse на сайте.
|
||||
|
||||
|
||||
-----------------------------------------------------------------
|
||||
http://kolmck.net
|
||||
vk@kolmck.net
|
||||
|
||||
------------------------------------------------------------------
|
||||
(C) 1999-2010, by Vladimir Kladov. All rights reserved.
|
Loading…
Reference in New Issue
Block a user