Solved

Problems with 'IS' in a DLL.

Posted on 2001-08-06
5
251 Views
Last Modified: 2010-04-04
I have a DLL and in it i have a standard function that is given some data and a label or panel ( TObject ) and then is meant to display a name in the Label and color it, show extra information ETC.

Code :

Procedure DisplayPersonName(Profile : TDllProfile; Query : TSQLSelect;DisplayLabel : TObject);Register;
var
  CaptionText : string;
  Colour      : TColor;
  FontColour  : TColor;
begin
  Dllprofile := profile;
  if not assigned(database) then
    RawConnect(Dllprofile);

  {All of my setting of the Caption + colors goes Here}

  if not assigned(DisplayLabel) then exit;

  if (DisplayLabel is TPanel)then
    begin
    (DisplayLabel as TPanel).Color := Colour;
    (DisplayLabel as TPanel).font.Color := FontColour;
    (DisplayLabel as TPanel).Caption := CaptionText;
    (DisplayLabel as TPanel).Hint := CaptionText;
    (DisplayLabel as TPanel).ShowHint := True;
    end;
  else
    try
    (DisplayLabel as TLabel).Color := Colour;
    (DisplayLabel as TLabel).font.Color := FontColour;
    (DisplayLabel as TLabel).Caption := CaptionText;
    (DisplayLabel as TLabel).Hint := CaptionText;
    (DisplayLabel as TLabel).ShowHint := True;
    except
    AppMessage('DisplayPersonName --> Unknown display type !');
    end;
end;

Simple !!!!!!

but sometimes the code does not correctly work out what the DisplayLabel IS !!
I am passing directly the object itself, IE Form1.MyPanel
but sometimes it works, im a bit confused.

i have stepped it through many times now and i dont understand ahy it thinks a label or panel is not a label or a panel !?!?!?

Help

Cheers with usual anticipation
Kristian
0
Comment
Question by:Kristian
5 Comments
 
LVL 20

Expert Comment

by:Madshi
ID: 6355956
The "is" looks for the object address. But both your dll and your exe have their own classes which implement TPanel and TLabel. So "dll.TPanel <> app.TPanel". One solution would be this:

if obj.ClassName = 'TPanel' then ...

This should always work.

Regards, Madshi.
0
 
LVL 20

Accepted Solution

by:
Madshi earned 50 total points
ID: 6355959
P.S: You can solve all those problems by compiling both your application and dll with runtime packages.
0
 
LVL 3

Expert Comment

by:rondi
ID: 6356025
Perhaps try to use a common ancestor of TPanel and TLabel
like TControl(DisplayLabel).Color := Color;

or assume by default that it's panel, then if there's an
error, assume it's a label:

try
  (DisplayLabel as TPanel).Color := Colour;
  (DisplayLabel as TPanel).font.Color := FontColour;
  (DisplayLabel as TPanel).Caption := CaptionText;
  (DisplayLabel as TPanel).Hint := CaptionText;
  (DisplayLabel as TPanel).ShowHint := True;
except
  try
    (DisplayLabel as TLabel).Color := Colour;
    (DisplayLabel as TLabel).font.Color := FontColour;
    (DisplayLabel as TLabel).Caption := CaptionText;
    (DisplayLabel as TLabel).Hint := CaptionText;
    (DisplayLabel as TLabel).ShowHint := True;
  except
  end;
end;
0
 

Expert Comment

by:sesa
ID: 6356705
Instead of
  (DisplayLabel as TPanel) and (DisplayLabel as TLabel)
use
  Tpanel(DisplayLabel) and Tlabel(DisplayLabel)


0
 
LVL 1

Author Comment

by:Kristian
ID: 6358859
this seems to have done it :

if DisplayLabel.ClassName = 'TPanel' then
    begin
    TPanel(DisplayLabel).Color := Colour;
    TPanel(DisplayLabel).font.Color := FontColour;
    TPanel(DisplayLabel).Caption := CaptionText;
    TPanel(DisplayLabel).Hint := CaptionText;
    TPanel(DisplayLabel).ShowHint := True;
    end
  else
    try
    TLabel(DisplayLabel).Color := Colour;
    TLabel(DisplayLabel).font.Color := FontColour;
    TLabel(DisplayLabel).Caption := CaptionText;
    TLabel(DisplayLabel).Hint := CaptionText;
    TLabel(DisplayLabel).ShowHint := True;
    except
    AppMessage('DisplayPersonName --> Unknown display type !');
    end;

and i am also compiling with runtime packages ( well i was befor anyway ) but the combination works...

I have noticed that since using delphi 5 and a lot more Dll's and packages things are a little more delicate and i find myself working around a lot of problems like this ! am i the only one ?

Im a bit split on who answered the question it was Madshi, even though sesa did have an influence. I will post an extra 25 for sesa in a new question ETC.

Cheers guys.
Kristian

oh and ps sorry it took me a while to get back but my packages fell apart half way through and i ended up having to remove them by deleting the registry settings just to remove the package so i could recompile it again so i could install it, as every time i tried to compile or uninstall it it would crash delphi..... like i said is it me or is delphi 5 a bit flakey with the use of packages ??
0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Objective: - This article will help user in how to convert their numeric value become words. How to use 1. You can copy this code in your Unit as function 2. than you can perform your function by type this code The Code   (CODE) The Im…
Introduction Raise your hands if you were as upset with FireMonkey as I was when I discovered that there was no TListview.  I use TListView in almost all of my applications I've written, and I was not going to compromise by resorting to TStringGrid…
This video shows how to quickly and easily add an email signature for all users on Exchange 2016. The resulting signature is applied on a server level by Exchange Online. The email signature template has been downloaded from: www.mail-signatures…
Although Jacob Bernoulli (1654-1705) has been credited as the creator of "Binomial Distribution Table", Gottfried Leibniz (1646-1716) did his dissertation on the subject in 1666; Leibniz you may recall is the co-inventor of "Calculus" and beat Isaac…

860 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question