?
Solved

Problems with 'IS' in a DLL.

Posted on 2001-08-06
5
Medium Priority
?
265 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
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 200 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

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

This article explains how to create forms/units independent of other forms/units object names in a delphi project. Have you ever created a form for user input in a Delphi project and then had the need to have that same form in a other Delphi proj…
Have you ever had your Delphi form/application just hanging while waiting for data to load? This is the article to read if you want to learn some things about adding threads for data loading in the background. First, I'll setup a general applica…
Monitoring a network: how to monitor network services and why? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the philosophy behind service monitoring and why a handshake validation is critical in network monitoring. Software utilized …
If you’ve ever visited a web page and noticed a cool font that you really liked the look of, but couldn’t figure out which font it was so that you could use it for your own work, then this video is for you! In this Micro Tutorial, you'll learn yo…
Suggested Courses
Course of the Month11 days, 14 hours left to enroll

752 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