?
Solved

Problems with 'IS' in a DLL.

Posted on 2001-08-06
5
Medium Priority
?
270 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 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

Industry Leaders: 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

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…
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 summaries big data hadoop online training demo (http://onlineitguru.com/big-data-hadoop-online-training-placement.html) , and covers basics in big data hadoop .
Is your data getting by on basic protection measures? In today’s climate of debilitating malware and ransomware—like WannaCry—that may not be enough. You need to establish more than basics, like a recovery plan that protects both data and endpoints.…
Suggested Courses
Course of the Month15 days, 1 hour left to enroll

840 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