AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Anfängerfrage Komponente: Was gehört in Constructor Create?
Thema durchsuchen
Ansicht
Themen-Optionen

Anfängerfrage Komponente: Was gehört in Constructor Create?

Ein Thema von iphi · begonnen am 2. Feb 2016 · letzter Beitrag vom 3. Feb 2016
Antwort Antwort
iphi

Registriert seit: 13. Feb 2009
262 Beiträge
 
Delphi 7 Personal
 
#1

Anfängerfrage Komponente: Was gehört in Constructor Create?

  Alt 2. Feb 2016, 19:29
Delphi-Version: 7
Hallo,

ich kämpfe gerade mit einer Komponente, die über eine serielle Schnittstelle auf ein Messgerät zugreifen soll. Die Details sollen alle in der Komponente gekapselt sein, so dass der Nutzer lediglich das Messgeräteobjekt auf seine Form packt und die Messwerte direkt auslesen kann.

Im Prinzip funktioniert das schon, ABER... eben nicht in der IDE, sonder nur, wenn man das Programm von außerhalb startet.

Ich vermute, ich verwende den Constructor Create der Messgerätekomponente falsch:
Im Create suche ich nach dem Messgerät und initialisiere die Verbindung mit dem COM Port. Ich habe den Eindruck, dass das bereits in der IDE passiert, wenn das Programm noch gar nicht gestartet ist. Dann scheint die serielle Schnittstelle für einen weiteren Verbindungsversuch blockiert zu sein.

Wo muss ich die Initialisierung der Verbindung hinpacken, damit sie nicht bereits in der IDE erfolgt, sondern erst bei Programmstart. In den OnCreate der MainForm soll sie nicht, weil das ganze vom Nutzer versteckt passieren soll.

Danke für Eure Hilfe!
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Anfängerfrage Komponente: Was gehört in Constructor Create?

  Alt 2. Feb 2016, 19:33
https://www.google.de/search?q=dont+...he+constructor

Schau dir doch mal die ganzen "Komponenten" wie Indy-Server oder Datenbank-Zugriffsdinger an. Die fangen auch nicht gleich an Kommunikation aufzubauen sobald man sie auf ein Formular wirft. Die haben alle eine Eigenschaft "Connected" oder "Active".
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Anfängerfrage Komponente: Was gehört in Constructor Create?

  Alt 2. Feb 2016, 19:40
Golden Rule:

Niemals im constructor Verbindungen zu externen Resourcen aufbauen.

Das gilt für jede Klasse. Kommt die Verbindung nicht zustande und es wird zu Recht eine Exception geworfen, bekommt man keine Instanz erzeugt.

Dafür macht man sich eine Active Eigenschaft, die das dann steuert.

Eine Komponente hat einen Delphi-Referenz durchsuchenTComponent.ComponentState mit allerlei interessanten Informationen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
iphi

Registriert seit: 13. Feb 2009
262 Beiträge
 
Delphi 7 Personal
 
#4

AW: Anfängerfrage Komponente: Was gehört in Constructor Create?

  Alt 2. Feb 2016, 19:55
Zitat:
Niemals im constructor Verbindungen zu externen Resourcen aufbauen.
Ok, hab ich gemerkt und jetzt auch verstanden, danke.

Zitat:
Dafür macht man sich eine Active Eigenschaft, die das dann steuert.
Sorry, den Hinweis verstehe ich nicht. Kannst Du bitte spezifischer erklären.

Das Problem ist ja, dass die Verbindung unsichtbar für den Benutzer der Komponente aufgebaut werden soll. Die Komponente müsste dann also einen Event auslösen, wenn sie geladen ist, der dann den Verbindungsaufbau auslöst. Sehe ich das richtig oder macht man das ganz anders?
Klar könnte ich eine public Connect-Prozedur erstellen, die der Nutzer aufruft, aber wie gesagt will ich das vermeiden. Die Verbindung soll einfach da sein, wenn das Programm gestartet ist.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Anfängerfrage Komponente: Was gehört in Constructor Create?

  Alt 2. Feb 2016, 21:15
Also ich mag Lampen, die ich bequem per Schalter ein- und ausschalten kann. Ich kann jetzt jederzeit entscheiden wann und wie lange die Lampe brennt.

Die Alternativen Stecker ziehen oder Birne zerschlagen find ich als Benutzer der Lampe uncool.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
iphi

Registriert seit: 13. Feb 2009
262 Beiträge
 
Delphi 7 Personal
 
#6

AW: Anfängerfrage Komponente: Was gehört in Constructor Create?

  Alt 2. Feb 2016, 21:31
Ich mag Lampen, die automatisch angehen, wenn man den Raum betritt. Es kann ja trotzdem Schalter geben.

Abfrage des ComponentState auf csDesigning hat das Problem gelöst. Danke für den Tipp!
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#7

AW: Anfängerfrage Komponente: Was gehört in Constructor Create?

  Alt 2. Feb 2016, 21:44
Klasse.
Nur wenn Du erst nachträglich erst festlegen kannst, wo und wie die Stromleitungen verlegt werden, ist das auch ein wenig ungünstig.

Dann doch lieber eine Lampe, die man explizit aktiviert (Sir Rufo: Anschalten, iphi: Automatismus aktivieren).

Übrigens: Und schon hast Du Abstraktion kennengelernt.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#8

AW: Anfängerfrage Komponente: Was gehört in Constructor Create?

  Alt 3. Feb 2016, 10:04
Ich mag Lampen, die automatisch angehen, wenn man den Raum betritt. Es kann ja trotzdem Schalter geben.
Was du aber zunächst gemacht hast ist die Lampe anzumachen, während du sie aus dem Karton auspackst und zusammenschraubst.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Anfängerfrage Komponente: Was gehört in Constructor Create?

  Alt 3. Feb 2016, 11:23
Ich verstehe was du erreichen willst, auch wenn ich denke, dass das mehrfach vorgeschlagene und auch von mir so praktizierte Vorgehen einfach "sauberer" ist. Du könntest dann beim Wiederverwerten der Komponente irgendwelche Eigenschaften wie Port, Geschwindigkeit etc. festsetzen und dann mit Active aktivieren. Nur so als Tip für die Zukunft bei weiteren Komponenten.

Was spricht dagegen in der Komponente eine Eigenschaft "active" einzuführen und diese dann wenn es denn sein muss im OnCreate-Ereignis der Form auf true zu setzen?? Wäre dasselbe Ergebnis und du hast eine saubere Komponente.

Liebe Grüße,
Michael
Michael Kübler
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz