• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 274
  • Last Modified:

Problems with 'IS' in a DLL.

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
Kristian
Asked:
Kristian
1 Solution
 
MadshiCommented:
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
 
MadshiCommented:
P.S: You can solve all those problems by compiling both your application and dll with runtime packages.
0
 
rondiCommented:
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
 
sesaCommented:
Instead of
  (DisplayLabel as TPanel) and (DisplayLabel as TLabel)
use
  Tpanel(DisplayLabel) and Tlabel(DisplayLabel)


0
 
KristianAuthor Commented:
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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Introducing Cloud Class® training courses

Tech changes fast. You can learn faster. That’s why we’re bringing professional training courses to Experts Exchange. With a subscription, you can access all the Cloud Class® courses to expand your education, prep for certifications, and get top-notch instructions.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now