[delphi] TFrame Gecreeerd?

Pagina: 1
Acties:

  • douweh
  • Registratie: Maart 2001
  • Laatst online: 09-10-2024
Mijn excuses voor de hele slechte topictitel..
maar ik kon niks beters verzinnen...

Ik vraag me het volgende af...

Ik heb een classe TInstellingen, afgeleid van TFrame..

Dit is een frame met instellingen voor mijn programma..

Nu wil ik runtime zo'n ding laten zien op een panel met de naam LinkerPanel..
omdat ik nog bij het object wil kunnen achteraf doe ik bovenin
Delphi:
1
 var instellingen: TInstellingen;  


op de volgende manier maak ik dan een afgeleide van TInstellingen aan en die geef ik weer in LinkerPanel... gaat allemaal prima
Delphi:
1
2
instellingen:=TInstellingen.Create(self);
instellingen.Parent:=LinkerPanel;


Wat ik echter nu wil is met een andere knop een andere instantie van TInstellingen aanmaken en ook laten zien in dat Panel.. Dit mag echter alleen maar als er niet al een TInstellingen is aangemaakt.. wat ik dus eigenlijk wil, is kijken of die instellingen nog leeg is...

Delphi:
1
2
3
4
if instellingen=leeg then begin;
    instellingen:=TInstellingen.Create(self);
    instellingen.Parent:=LinkerPanel;
end;


Volgens mij is dat redelijk basic delphi maar ik kom er even niet uit...

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Delphi:
1
if instellingen = nil then

Werkt dat niet?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • douweh
  • Registratie: Maart 2001
  • Laatst online: 09-10-2024
nee dat heb ik geprobeerd... ik dacht ook dat dat de manier was waarop het moest..

maar werkte niet..

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 06-05 18:51

Creepy

Tactical Espionage Splatterer

Een .free zorgt er wel voor dat de instantie wordt opgeruimt, maar kent niet automatisch nil toe aan de variabele. Als je sysutils al gebruikt dan kan je freeandnil(instellingen) gebruiken. Anders kan je na de .free zelf nil toekennen.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Hij wil niet nil toekennen aan een object, maar kijken of een object al dan niet geïnstantieerd is? :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • ReallyStupidGuy
  • Registratie: Januari 2002
  • Laatst online: 01-05 10:31
-NMe- schreef op maandag 20 juni 2005 @ 18:44:
Delphi:
1
if instellingen = nil then

Werkt dat niet?
Leek mij ook de oplossing. Ik neem aan dat je bij het sluiten wel FreeAndNil gebruikt.

Wat je ook zou kunnen doen als LinkerPanel maar 1 object bevat is
code:
1
2
if LinkerPanel.ControlCount>0 and LinkerPanel.Controls[0].ClassName='TInstellingen' then
   Bladiebla;

Maar dat is iets minder vraai lijkt me. Als instellingen het enige frame is dat op dat panel getoond wordt (lijkt me niet maar toch) zou je alleen controlcount kunnen gebruiken.

Duizend wijzen kunnen meer vragen stellen dan één idioot kan beantwoorden.


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Tuurlijk werkt NME's suggestie wel. Misschien moet je eens debuggen en kijken waarom het bij jouw niet gaat. Ben je bijvoorbeeld vergeten om de variable vanaf het begin op nil te zetten? Of na het vrijgeven, zoals Creepy voorstelt?

We adore chaos because we like to restore order - M.C. Escher


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 19:34

Tomatoman

Fulltime prutser

ReallyStupidGuy schreef op maandag 20 juni 2005 @ 19:22:
[...]
Wat je ook zou kunnen doen als LinkerPanel maar 1 object bevat is
code:
1
2
if LinkerPanel.ControlCount>0 and LinkerPanel.Controls[0].ClassName='TInstellingen' then
   Bladiebla;
Die code gaat niet compileren zonder haakjes, omdat and geëvalueerd wordt vóór > en =. Bovendien is het verstandig om zo min mogelijk met namen van objecten te werken in de vorm van strings. Als je ooit besluit de class name te veranderen, is de kans groot dat je allang vergeten bent dat je ergens een string hebt staan met diezelfde naam. De compiler geeft dan geen enkele waarschuwing dat de code niet meer doet wat je ooit had bedacht.

De volgende code is daarom netter. In plaats van de class name in de vorm van een string gebruik je de class type. Mocht je TInstellingen ooit hernoemen naar TMijnSpecialeInstellingen, dan krijg je tenminste een foutmelding van de compiler dat TInstellingen onbekend is.
Delphi:
1
2
3
if (LinkerPanel.ControlCount > 0) and
  (LinkerPanel.Controls[0].ClassType = TInstellingen) then
  Bladiebla;

Een goede grap mag vrienden kosten.

Pagina: 1