AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Komponente umstellen

Ein Thema von EWeiss · begonnen am 22. Jan 2016 · letzter Beitrag vom 27. Jan 2016
Antwort Antwort
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Komponente umstellen

  Alt 24. Jan 2016, 15:56
Also zu 1) solltest Du den Hinweis von DeddyH nochmal berücksichtigen.

Wenn Dein Formular geöffnet wird (egal ob zur Designtime oder Runtime) werden zunächst die Komponenten erstellt und DANACH werden die Werte gesetzt. Wenn Du im Konstruktor auf bestimmte Werte prüfst, ist das einfach zu früh.
Du musst entweder im Setter der Eigenschaft auf Änderungen reagieren (i.d.R. die sinnvollste Lösung) oder nach den DatenAusDerDFM-lesen (in Loaded).


Zu 2) weiß ich auch nicht recht.
Du willst zur Designtime einen Wert als Text festlegen - richtig? Aber auf jedem System, auf dem die EXE gestartet wird, können die möglichen Werte abweichen?
Insofern wäre m.E. ein Property-Editor sinnvoll, der Dir die möglichen Werte auflistet und Du EINEN als String speicherst.
Beim Programmstart wird geprüft, ob dieser Wert auf dem aktuellen System verfügbar ist und dann eingestellt.
Wenn nicht wird ein Dialog für die Auswahl geöffnet.
In der DFM würde dann nur ein String gespeichert werden.

Für bearbeitbare Listen im Formular sind TCollection vorgesehen.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Komponente umstellen

  Alt 24. Jan 2016, 16:03
Danke erst mal.
Zitat:
Also zu 1) solltest Du den Hinweis von DeddyH nochmal berücksichtigen.
Das habe ich, zumindest versucht.
Das Problem ist nur ich benötige diese abfrage in create weil sonst die ganzen Componenten nicht erstellt werden.
Das führt unweigerlich zu einem AV


Zitat:
Du willst zur Designtime einen Wert als Text festlegen
Richtig damit der User die auf der Form geklatschte Componente ohne umschweife direkt zuweisen kann.
Das über Index zu machen wo man noch nicht weis ob das Device überhaupt Aktiv ist scheint mir nicht der richtige weg.
Also alle Device die dort angezeigt werden sollen bei einem Klick auf dem jeweiligen Eintrag der aktuellen Komponente zugewiesen werden.
Nur die Lösung mit Tstrings ist ungenügend da nicht aus wählbar.

gruss

Geändert von EWeiss (24. Jan 2016 um 18:05 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Komponente umstellen

  Alt 24. Jan 2016, 16:41
1) In Create kannst Du das nicht lösen. Das ist nicht möglich.
Also musst Du das später tun und Deine Subcontrols vor möglichen Zugriffen auf Nil prüfen oder sie immer erzeugen und Visible := False zuweisen.

2) Ich verstehe nicht, warum Du die Strings im Formular speichern willst.
Die kannst Du doch entweder fest in der Komponente fixieren oder sie jeweils dynamisch zuweisen.
Dann bauchst Du nur einen String und kannst prüfen, ob der zu der aktuellen Liste auf dem aktuellen System passt.
Die Liste aller denkbaren Einträge müssen dann nicht im Formular gespeichert werden.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Komponente umstellen

  Alt 24. Jan 2016, 16:52
Zitat:
In Create kannst Du das nicht lösen. Das ist nicht möglich.
Jo hat DeddyH ja schon gesagt.

Zitat:
Ich verstehe nicht, warum Du die Strings im Formular speichern willst.
Im ObjektInspektor

Das erste Device existiert immer.
Die AppVolume kann, muss aber nicht eingebunden werden. (Anwendungsabhängig)

Wenn ich eine Liste habe im ObjektInspektor dann kann ich anhand der Einträge Device dynamisch addieren.
Oder direkt so wie in meinem Sample.
Die nicht aktiven Device kann man dann anhand des aktiven Status deaktivieren.

Der sinn des ganzen ist einfach.
Wenn ich einen festen Font einer Komponente ändern will dann mache ich das im ObjektInspektor und schreibe dafür nicht extra Code

PS:
Ok! Ich gebe es auf mit dem Inspektor.
1 Gerät und die Anwendungslautstärke wird addiert.
Will man ein anderes Gerät verwenden muss man dieses aus der Combo laden.
Dann ändert sich das Default Gerät entsprechend.

gruss

Geändert von EWeiss (24. Jan 2016 um 18:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.962 Beiträge
 
Delphi 12 Athens
 
#5

AW: Komponente umstellen

  Alt 24. Jan 2016, 19:41
Du kannst eine eigene Klasse von TStrings ableiten und dafür dann einen Editor registrieren (RegisterComponentEditor). Da kannst du dich dann austoben was der Benutzer wie auswählen können soll.

Zu dem Problem mit Loaded:
Ich glaube ohne mehr Quelltext lässt sich da nicht viel mehr helfen, da so nicht nachvollziehbar ist wo deine Probleme auftreten. Möglich ist das jedenfalls sicher...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Komponente umstellen

  Alt 24. Jan 2016, 20:19
Zitat:
Ich glaube ohne mehr Quelltext lässt sich da nicht viel mehr helfen, da so nicht nachvollziehbar ist wo deine Probleme auftreten. Möglich ist das jedenfalls sicher...
Habe das Archiv nochmal hochgeladen wenn du mal reinschauen willst.
AudioVolume2 mit AppVolume im Inspektor ändern True/False
Dann Form schließen/öffnen und dann wundern das es nicht läuft.

Zur Laufzeit geht es weil ich den Wert Quelltextmäßig ändere (Das soll nachher deaktiviert werden wenn das umschalten funktioniert.)

AudioVolume2.AppVolume := True;

Einen letzten Versuch ist es wert.

gruss

Geändert von EWeiss (24. Jan 2016 um 20:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.962 Beiträge
 
Delphi 12 Athens
 
#7

AW: Komponente umstellen

  Alt 24. Jan 2016, 21:28
Im SetAppVolume werden diverse Komponenten erstellt, aber keine freigegeben. Wenn ich also mehrfach umschalte, wird immer mehr Speicher verbraucht.

Was ich an dem Konzept gar nicht verstehe:
Es werden doch die selben Komponenten verwendet, egal ob AppVolume True oder False ist soweit ich das sehe. Warum werden da verschiedene erstellt statt einfach immer die gleichen zu benutzen?
So hast du eine pbMasterMeter und eine pbAppMeter usw., alles doppelt.

Da die gleichzeitig nie verwendet werden, macht das doch keinen Sinn...

Wenn du nur ein Set an Komponenten hast und dieses nur je nach Einstellung so oder so nutzt, wird es auch funktionieren...
Die Anzeige kannst du dann in Loaded aktualisieren, aber die Komponenten sind dann immer da.

Fehler bekommst du, wenn du erst in Loaded die Komponenten initialisierst, weil auch Left usw. bereits vorher gesetzt werden und du in WMSize usw. die Komponenten schon nutzt. Debuggen kannst du das sehr einfach indem du die IDE als Hostanwendung des Packages einträgst.
Sebastian Jänicke
AppCentral
  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 21:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz