Solved

Problems with 'IS' in a DLL.

Posted on 2001-08-06
5
244 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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Suggested Solutions

Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
Introduction I have seen many questions in this Delphi topic area where queries in threads are needed or suggested. I know bumped into a similar need. This article will address some of the concepts when dealing with a multithreaded delphi database…
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…
I designed this idea while studying technology in the classroom.  This is a semester long project.  Students are asked to take photographs on a specific topic which they find meaningful, it can be a place or situation such as travel or homelessness.…

930 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

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now