Difference between revisions of "LMD VCL - LMD-Tools FAQ"

From LMD
Jump to: navigation, search
(TLMDCaptionPanel (-Group): Pasting components)
Line 62: Line 62:
  
 
==LMD-Tools==
 
==LMD-Tools==
===TLMDCaptionPanel (-Group): Pasting components from ClipBoard not possible===
+
===TLMDCaptionPanel (-Group)===
 +
==== Pasting components from ClipBoard not possible ====
 
Because of a glitch with inner controls pasting components from clipboard onto TLMDCaptionPanel components is not possible (controls will be simply not visible). However there is a simple workaround.  
 
Because of a glitch with inner controls pasting components from clipboard onto TLMDCaptionPanel components is not possible (controls will be simply not visible). However there is a simple workaround.  
 
In context menu of form select “View as Text” and move the object data within the PanelClient object of TLMDCaptionPanel directly in DFM code. Example:<br>
 
In context menu of form select “View as Text” and move the object data within the PanelClient object of TLMDCaptionPanel directly in DFM code. Example:<br>
Line 103: Line 104:
 
</delphi>
 
</delphi>
  
===TLMDOneInstance: Flickering of main window when second instance is started.===
+
=== TLMDFormDisplay ===
 +
==== How to access specific controls on displayed forms? ====
 +
To access controls on forms displayed in a TLMDFormDisplay component you have to typecast the active form. E.g. to access an Edit control on a form called TMyForm called Edit1, you have to typecast to:
 +
 
 +
<delphi>TMyForm(MyFormDisplay.ActiveForm).Edit1.Text:='SampleText';</delphi>
 +
<br>
 +
<b>Reason</b><br>
 +
The Internal Forms array or ActiveForm property use the abstract TCustomForm class. This fact allows you to add any form which is derived from TCustomForm to the TLMDFormDisplay component. The side effect is however, that TLMDFormDisplay control does not know of any special features which are available for a specific descendant (thus typecasting to desired form type is required).
 +
 
 +
=== TLMDOneInstance ===
 +
==== Flickering of main window when second instance is started. ====
 
There are two ways to workaround this:
 
There are two ways to workaround this:
 
* You create a small separate application which has nothing else to do except closing the current instance and restarting it..
 
* You create a small separate application which has nothing else to do except closing the current instance and restarting it..
Line 109: Line 120:
 
To mimic TLMDOneInstance without using the control: In the project source file add LMDClass unit to uses clause and check LMDApplication.IsPrevRunning property before any form is loaded (this global property tells you, whether a previous instance is running). If yes, simple exit the application and call LMDActivatePrevInstance method from LMDUtils.pas to activate the already running instance.  
 
To mimic TLMDOneInstance without using the control: In the project source file add LMDClass unit to uses clause and check LMDApplication.IsPrevRunning property before any form is loaded (this global property tells you, whether a previous instance is running). If yes, simple exit the application and call LMDActivatePrevInstance method from LMDUtils.pas to activate the already running instance.  
 
To explicitely allow restart simply use a command line parameter, so that test for previous instance is skipped when command line parameter is set.
 
To explicitely allow restart simply use a command line parameter, so that test for previous instance is skipped when command line parameter is set.
===Using OnCustomize event in dialog controls===
+
 
 +
=== Dialog Controls ===
 +
==== Using OnCustomize event in native LMD Dialog controls ====
 
<delphi>
 
<delphi>
 
procedure TForm1.dCustomize(Sender: TObject);
 
procedure TForm1.dCustomize(Sender: TObject);

Revision as of 19:58, 20 June 2007

[edit]

<< Back to Overview page

General

CBuilder SpeedUp

<c>

  1. include <oleidl.h>

HKEY_CURRECTUSER SaveSettings

  1. define NO_WIN32_LEAN_AND_MEAN

</c> NO_WIN32_LEAN_AND_MEAN When this macro is defined, VCL.H does not define WIN32_LEAN_AND_MEAN. Default: OFF

VCL_FULL Same as NO_WIN32_LEAN_AND_MEAN (NOTE: This macro is for BCB v1.0 backward compatibility) Default: OFF

INC_VCLDB_HEADERS When this macro is defined, VCL.H includes the core Database headers of VCL. (Defining this macro is functionally equivalent to including VCLDB.H) Default: OFF

INC_ALLVCL_HEADERS When this macro is defined, VCL.H includes all VCL headers. (Defining this macro is functionally equivalent to including VCLMAX.H) Default: OFF

Installation

Installing Source Version (Release 7)

Make sure to install first the CE special packages (DesignPack, BarPack and StoragePack) and at last LMD-Tools Core Package (oldest to latest package). I strongly suggest to install all to the same installation path. Make sure that the source path is available in Library path settings and is in best case the first path mentioned. Then load the
__lmd2003all_d5.bpg project group.
This project group contains all package files in the order we suggest to install them. Ignore if e.g. dcllmdold.dpk is not found (or CE packages if you did not install them). However the most important point is, that dcllmdshared_d5 is the first package to be compiled. As a rule: lmd*.bpl are runtime packages, dcllmd*.bpl packages are designtime packages. Only for designtime packages press "Install" button. The compiler will place all new packages into your projects\bpl folder, so I suggest you remove runtime packages from previous installation.
Do not use "Build ALL" command, because this feature is buggy in D5. If any further problems occur please let me know.

Version Mix Up

if Delphi claims that it can't find a file (though DCUs are available and Library Path is set correctly - see Environment Options), there can be only possible cause for the problem: There is a version mix up. For the offending files please check whether a previous version was completely uninstalled, that no parts are compiled into existing packages (e.g. your personal packages, you might have to rebuild the package), that your project was REBUILD (to force the compilation of latest PAS/DCU files). Furthermore the project files may have references to older package files (especially if you use runtime packages, simply check Package settings in Project Options.

"Entry Point not found" (Release 6)

Each time you receive "Entry Point not found" or "Could not find [..]" error, you can be sure that it is caused by a version mix up. I guess somehow you did not uninstall a previous version completely. E.g. if you compiled sourcecode, Delphi places created runtime BPL's automatically into the default BPL output path (can be set in Environment Options dialog). Older version may have installed them in System directory - so there is the possible version conflict. To completely remove an old LMD-Tools version (the hard way):

  • Close Delphi (Note: Be sure that you did not include any LMD-Tools units in own packages, otherwise

open these packages, remove LMD-Tools units and recompile them).

    • Use all uninstallers for previous version
    • Delete all LMD-Tools directoies
    • Delete all LMD-Tools path settings from Extras|Environment Options|Tab Library
    • Now most important point: Search your harddisk (at least in your system directory

and the Delphi Projects\BPL path) for LMD BPLs.

  • Use as search string lmd*.bpl for runtime packages.
  • Use as search string dcllmd*.bpl for designtime packages.
  • Remove them all

To install LMD-Tools sourcecode:

  • Use the LMD-Tools 6 source installer
  • After installation check whether paths to LMD-Tools Source files are correctly set. If for any reason not, add them yourself
  • We have extremly simplified source compilation. Load the correct project group (e.g. lmdtools_d6.bpg for Delphi 6). and compile one package after another. Install only Desigtime packages (dcllmd*.bpk). All compiled packages can be found after compilation in the Projects\BPL path of your Delphi version.

Note: Simply ignore errors for RichPack and ShellPack project files, both packages are not included in current release and will be available in the next days.

To install LMD-Tools default packages: Run the correct installer. The only issues which could go wrong are:

  • Paths are not updated: Solution is to add paths manually
  • Packages are not seen in Delphi: Add dcl*.bpl packages manually from the Install Packages dialog.


LMD-Tools

TLMDCaptionPanel (-Group)

Pasting components from ClipBoard not possible

Because of a glitch with inner controls pasting components from clipboard onto TLMDCaptionPanel components is not possible (controls will be simply not visible). However there is a simple workaround. In context menu of form select “View as Text” and move the object data within the PanelClient object of TLMDCaptionPanel directly in DFM code. Example:

[1] This is an empty TLMDCaptionPanel <delphi>

 object LMDCaptionPanel1: TLMDCaptionPanel
   Left = 304
   Top = 144
   Width = 193
   Height = 121
   Bevel.Mode = bmStandard
   Bevel.StandardStyle = lsWindowBorder
   TabOrder = 0
   object TLMDCaptionPanelClient
   end
 end

</delphi>
[2] Move component data between “object TLMDCaptionPanelClient” and “end”, e.g. <delphi>

 object LMDCaptionPanel1: TLMDCaptionPanel
   Left = 304
   Top = 144
   Width = 193
   Height = 121
   Bevel.Mode = bmStandard
   Bevel.StandardStyle = lsWindowBorder
   TabOrder = 0
   object TLMDCaptionPanelClient
     object Button1: TButton
       Left = 80
       Top = 40
       Width = 75
       Height = 25
       Caption = 'Button1'
       TabOrder = 0
     end
   end
 end

</delphi>

TLMDFormDisplay

How to access specific controls on displayed forms?

To access controls on forms displayed in a TLMDFormDisplay component you have to typecast the active form. E.g. to access an Edit control on a form called TMyForm called Edit1, you have to typecast to:

<delphi>TMyForm(MyFormDisplay.ActiveForm).Edit1.Text:='SampleText';</delphi>
Reason
The Internal Forms array or ActiveForm property use the abstract TCustomForm class. This fact allows you to add any form which is derived from TCustomForm to the TLMDFormDisplay component. The side effect is however, that TLMDFormDisplay control does not know of any special features which are available for a specific descendant (thus typecasting to desired form type is required).

TLMDOneInstance

Flickering of main window when second instance is started.

There are two ways to workaround this:

  • You create a small separate application which has nothing else to do except closing the current instance and restarting it..
  • You do not use the component but internal functions of LMD-Tools (more complex, but elegant).

To mimic TLMDOneInstance without using the control: In the project source file add LMDClass unit to uses clause and check LMDApplication.IsPrevRunning property before any form is loaded (this global property tells you, whether a previous instance is running). If yes, simple exit the application and call LMDActivatePrevInstance method from LMDUtils.pas to activate the already running instance. To explicitely allow restart simply use a command line parameter, so that test for previous instance is skipped when command line parameter is set.

Dialog Controls

Using OnCustomize event in native LMD Dialog controls

<delphi> procedure TForm1.dCustomize(Sender: TObject); var i:Integer; begin with TForm(Sender) do for i:=0 to ComponentCount-1 do if (Components[i] is TLMDButton) and (TLMDButton(Components[i]).Caption='&New Folder') then TLMDButton(Components[i]).Caption:='MyString'; end; </delphi>

Help Index problems until Delphi 7

Itsa actually a limitation of WinHelp and the amount of Indexes it can deal with. Go over the limit and the index part of WinHelp just packs up and goes home. The only solution is to open OpenHelp and remove a few indexes from the index tab until you get under the WinHelp threshold.