komponente droppable , Duplikat, nur 1 Instanz

Rund um die LCL und andere Komponenten
arturx
Beiträge: 140
Registriert: Fr 21. Nov 2008, 11:29
OS, Lazarus, FPC: Winux (L 1.0.6.xy FPC 2.6.z)
CPU-Target: 32/64Bit

komponente droppable , Duplikat, nur 1 Instanz

Beitrag von arturx »

Ich möchte entscheiden können,
auf welches Formular eine komponente gedroppt (designtime !) werden darf oder auch nicht.
Der Kern meiner Frage :
wie kann ich verhindern, dass eine komponente gedroppt werden darf ?
(einfach in den constructor abort zu schreiben oder ihn direkt mit exit zu verlassen
erzeugt nur "interessante" Wirkungen.. aber leider nicht den gewünschten Effekt)

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: komponente droppable , Duplikat, nur 1 Instanz

Beitrag von pluto »

Wozu soll das genau gut sein?

Eine Möglichkeit wäre es über das onDr.... Event zu lösen und dort müsste es eine Booleanische Var Variable geben, die du auf False stellen könntest. Wäre nur so eine Idee. Eine andere wäre noch: Schau dir mal ComponentStyle oder ControlStyle genauer an. Ich meine dort gab es Entsprechende Möglichkeiten.
MFG
Michael Springwald

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: komponente droppable , Duplikat, nur 1 Instanz

Beitrag von marcov »

Das functioniert denke ich nicht auf Komponent Niveau. Man soll dafuer tiefer in Lazarus reingreifen mussen (in andere Worte: den Designer patchen)

arturx
Beiträge: 140
Registriert: Fr 21. Nov 2008, 11:29
OS, Lazarus, FPC: Winux (L 1.0.6.xy FPC 2.6.z)
CPU-Target: 32/64Bit

Re: komponente droppable , Duplikat, nur 1 Instanz

Beitrag von arturx »

1.Wozu soll das gut sein :
Ich nutze eine zentrale Komponente in allen Projekten,
die verschiedene Events / Werte / ... zur Verfügung stellt. (wie z.B. auch application).
Leider kann ich die events zur designtime nicht nutzen
--> bis jetzt fallen mir als "unterschiebbare" Eigenschaften nur DLL's und getrennte Daten-files ein
Aber immerhin lassen sich die Eigenschaften bequem setzen und nutzen.

2."onDr...Event" von was ?
Die Komponente(abgeleitet von tcomponent) hat das nicht.

3.1.controlstyle gibts erst ab tcontrol
2.tcomponentstyle scheint keine passenden Werte zur Verfügung zu stellen.

-----------------
Welche Mechanismen aus Lazarus.exe sind dafür verantwortlich ?

Wo findet man eine Beschreibung, wie die Lazarus.IDE im Hintergrund arbeitet ?
und wo man sich "ein-hooken :roll: " kann.

Danke für die schnelle Antwort !

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: komponente droppable , Duplikat, nur 1 Instanz

Beitrag von pluto »

Du kannst die Standard Events auch zu Desing Zeit abfangen meine ich. Einige Komponenten z.b. die ListBox reagieren auf das Mausrad. Die ScrollBox im Übrigen auch. Vielleicht kannst du dir da Anregungen hohlen.
MFG
Michael Springwald

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2822
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: komponente droppable , Duplikat, nur 1 Instanz

Beitrag von m.fuchs »

arturx hat geschrieben:1.Wozu soll das gut sein :
Ich nutze eine zentrale Komponente in allen Projekten,
die verschiedene Events / Werte / ... zur Verfügung stellt. (wie z.B. auch application).
Leider kann ich die events zur designtime nicht nutzen
--> bis jetzt fallen mir als "unterschiebbare" Eigenschaften nur DLL's und getrennte Daten-files ein
Aber immerhin lassen sich die Eigenschaften bequem setzen und nutzen.
Du möchtest also ein Singleton-Objekt in deinen Projekten nutzen und dessen Published-Eigenschaften über den Objektinspektor zur Designzeit setzen?
Kannst du dann das Problem nicht einfach auftrennen? Also ein Singleton zur reinen Speicherung und eine Komponente die ihre Eigenschaften aus den Properties des Singletons liest und sie wieder dort hineinschreibt? Dann können ja auch mehrere Komponenten dieser Art verwendet werden und alle greifen nur auf einen Datenbestand zu.

Ich muss aber dazu sagen dass ich das noch net probiert habe und auch nicht einmal ganz sicher bin ob ich dein Problem richtig verstanden habe.

mfg
Micha
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: komponente droppable , Duplikat, nur 1 Instanz

Beitrag von pluto »

Nein. Ich glaube er möchte etwas anders: Er möchte auf Events reagieren und zwar nicht zur Laufzeit sondern zu Desing Zeit. Meiner Meinung nach müsste das genauso gehen, wie zur Entwicklungs Zeit. Einfach die Entsprechenden "Methoden" verwenden. Du hast doch sicherlich deine Komponente von TCustomControl abgeleitet.

Wenn du jetzt z.b. die Methode MouseDown überschreibst müsstest du auch zur Desing Zeit darauf reagieren können und hier findest du auch eine Methode die deinen wünschen schon recht nahe kommt. Es gab da mal was mit Sup oder Subcomponent. Vielleicht ist das etwas. Kannst ja mal hier im Forum danach suchen.
MFG
Michael Springwald

Bora4d
Beiträge: 290
Registriert: Mo 24. Dez 2007, 13:14
OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
CPU-Target: AMD64X2

Re: komponente droppable , Duplikat, nur 1 Instanz

Beitrag von Bora4d »

Ich glaube du muß DesginEditor für deine Komponente erstellen. Ich kenne das von Delphi z.B. bei jvWizard mußt alle Komponenten auf die Oberkomponente TjvWizard ablegen wenn du es auf Form oder auf andere Komponenten ablegst gibt's immer Meldung.
Lade JVC für Delphi runter und Schau nach wie die das gemachten haben. VCL und LCL ist ja fast "idenstch" oder guck bei Lazarus wie dort Komponenten Editoren erstellt werden.
Aber den standard Formdesigner von Lazarus zu ändern muß falscher weg sein.

arturx
Beiträge: 140
Registriert: Fr 21. Nov 2008, 11:29
OS, Lazarus, FPC: Winux (L 1.0.6.xy FPC 2.6.z)
CPU-Target: 32/64Bit

Re: komponente droppable , Duplikat, nur 1 Instanz

Beitrag von arturx »

Ihr habt Recht: Ich habe mehrere Probleme auf einmal angesprochen :
-Ich möchte eine Art "Singleton-Objekt" erstellen. (Ich hab gerade nachgelesen, was das ist)-

1.Nur 1 Instanz : scheint sehr aufwändig zu sein.
Zur Not kann ich auch aufpassen oder mich durch Fehlermeldung des constructors warnen lassen :

Code: Alles auswählen

If (not ffirsttime) and (csdesigning in componentstate) 
              then  fehlermeldung.....


2.Als Komponente : Der Vorteil einer Komponente ist die Veränderbarkeit im Objectinspector zur Designzeit

2.1.Ich würde gern events zuweisen und zur Designtime nutzen
--> Ich glaube mittlerweile nicht mehr, dass es funktionierten kann,
eine onxy-event property zu setzen, die zur designtime nutzbar ist.
Denn der dem onxy-event zugewiesene Code wird ja erst nach der Compilierung-also zur runtime-nutzbar.

-->Zur Designtime (Obj.Insp) kann nur auf kompilierten Code( DLL u.ä) oder Daten (z.B. per datasetkomps oder streams)
zugegriffen werden. Diese ließen sich unabhängig von der Komponente verändern und direkt zur Designtime nutzen.
Dieser "fertige Code" müsste dann natürlich in einem "DesignEditor" bearbeitet und genutzt werden.

Soweit mein aktueller Erkenntnisstand.
Manches klärt und differenziert sich erst durch unsere Diskussionen.
Vielen Dank für Eure rege Beteligung, die doch einige Ideen und Überlegungen losgetreten hat.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2822
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: komponente droppable , Duplikat, nur 1 Instanz

Beitrag von m.fuchs »

arturx hat geschrieben:Ihr habt Recht: Ich habe mehrere Probleme auf einmal angesprochen :
-Ich möchte eine Art "Singleton-Objekt" erstellen. (Ich hab gerade nachgelesen, was das ist)-

1.Nur 1 Instanz : scheint sehr aufwändig zu sein.
Nö, so aufwändig ist das gar nicht. Hört sich alles schlimmer an als es ist.
Eine kleine Anleitung kannst du hier finden: http://www.michael-fuchs.net/rubriken/e ... leton.html" onclick="window.open(this.href);return false;
arturx hat geschrieben:Zur Not kann ich auch aufpassen oder mich durch Fehlermeldung des constructors warnen lassen :

Code: Alles auswählen

If (not ffirsttime) and (csdesigning in componentstate) 
              then  fehlermeldung.....
Ja, das geht natürlich auch. Immer eine Frage, wie groß ist das Projekt, wieviel Zeit für Wartung steht zur Verfügung, etc.
Singletons (wie alle diese schönen Patterns) erzeugen natürlich auch ein wenig Arbeit und ob sich die immer lohnt ist fraglich. Ich würde es allerdings an deiner Stelle wohl benutzen. Letzendlich gibt es aber immer mehrere Wege.
arturx hat geschrieben:2.Als Komponente : Der Vorteil einer Komponente ist die Veränderbarkeit im Objectinspector zur Designzeit
Erzeugt denn deine Komponente tatsächlich eine Ausgabe die du schon zur Designzeit (aus Kontrollgründen) sehen willst? Wenn nicht würde ich keine Komponente daraus machen, ob ich Properties im Quellcode oder im OI setze macht doch wenig Unterschiede.

mfg
Micha
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

arturx
Beiträge: 140
Registriert: Fr 21. Nov 2008, 11:29
OS, Lazarus, FPC: Winux (L 1.0.6.xy FPC 2.6.z)
CPU-Target: 32/64Bit

Re: komponente droppable , Duplikat, nur 1 Instanz

Beitrag von arturx »

m.fuchs hat geschrieben:Nö, so aufwändig ist das gar nicht. Hört sich alles schlimmer an als es ist.
Eine kleine Anleitung kannst du hier finden: http://www.michael-fuchs.net/rubriken/e ... leton.html" onclick="window.open(this.href);return false;
Wow, Danke !
m.fuchs hat geschrieben:Erzeugt denn deine Komponente tatsächlich eine Ausgabe die du schon zur Designzeit (aus Kontrollgründen) sehen willst?
Wenn nicht würde ich keine Komponente daraus machen, ob ich Properties im Quellcode oder im OI setze macht doch wenig Unterschiede.
Ich möchte zur designtime Werte für Properties anderer komponenten erzeugen (z.B denkbar für SQL) :
diese Codeerzeugung muss abhängig sein von einer unterliegenden Definitions Datenkbank oder einer einer DLL.
(anders gehts nicht : s.o.)

Augenblicklich die wahrscheinlichste Lösung :

1.Ein zentrales Verwaltungsobject wird per initialization/finalization oder genau 1x bei der 1.Anforderung erstellt
( der einzige zu setzende Wert ist der Name der Def-Datenbank oder der Def-Dll ( und das geht wirklich ohne Aufwand per Code.....)

2.die Komponenten, die den SQL Code erzeugen und dann z.B. der Query-Komponente zuweisen,
müssen sich (intern) auf das zentrale Object beziehen.
Beispiel : virtueller SQL-Code --> realer SQL Code (=Zuweisung der Ergebnisse zur designtime !!! )

3.die Beeinflussung der Defitions-Daten wird als PropEditor aufgerufen und kann so
von allen Komponenten mit der entsprechenden Property zur Designtime durchgeführt werden werden.
--> Veränderung der Bezugs/Definitions Daten zur Laufzeit

Soweit mein aktueller Stand.
Vielleicht fallen Euch ja noch Schwächen / Verbesserungs-Ideen ein ?!

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: komponente droppable , Duplikat, nur 1 Instanz

Beitrag von pluto »

Warum so Kompliziert? Es gibt da eine Komponente*G* wenn ich dich richtig verstanden habe. Die heißt genau so was du haben möchtest.
MFG
Michael Springwald

arturx
Beiträge: 140
Registriert: Fr 21. Nov 2008, 11:29
OS, Lazarus, FPC: Winux (L 1.0.6.xy FPC 2.6.z)
CPU-Target: 32/64Bit

Re: komponente droppable , Duplikat, nur 1 Instanz

Beitrag von arturx »

pluto hat geschrieben:Es gibt da eine Komponente*G*
Hallo Michael, Danke für die Info. Wo finde ich die Komponente ???
Danach zu suchen ist ein Problem, da die Suchhilfen *G* leider nur als Wildcard interpretieren....

Zu meiner eigenen Aussage (s.o. 1):
Das zentrale Verwaltungsobject muss doch eine Komponente sein, sonst ist ihr Code nicht zur Designtime nutzbar..

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: komponente droppable , Duplikat, nur 1 Instanz

Beitrag von pluto »

Vielleicht suchst du sowas hier:
http://wiki.lazarus.freepascal.org/UniqueInstance" onclick="window.open(this.href);return false;
MFG
Michael Springwald

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2822
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: komponente droppable , Duplikat, nur 1 Instanz

Beitrag von m.fuchs »

pluto hat geschrieben:Vielleicht suchst du sowas hier:
http://wiki.lazarus.freepascal.org/UniqueInstance" onclick="window.open(this.href);return false;
Das wäre ja die Lösung wenn nur eine Instanz des PROGRAMMS laufen soll. Ich hab arturx so verstanden, dass nur eine Instanz einer KLASSE erstellt werden kann.

mfg
Michael
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Antworten