AGB  ·  Datenschutz  ·  Impressum  







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

Media Center entwickeln

Ein Thema von Cyberaxx · begonnen am 23. Jan 2008 · letzter Beitrag vom 5. Jun 2008
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#11

Re: Media Center entwickeln

  Alt 25. Jan 2008, 22:55
@Ansgar
Die Schaltung zur Selbsthaltung(auf Transitoren basierend) habe ich gerade nicht parat, da müsste ich erst in meinen Schulunterlagen schauen. Es gibt aber auch Selbsthaltungen die rein über ein Relais geschaltet werden.
Werde sie mal posten sobald ich sie gefunden habe. Hier mal dargestellt mit einem Schütz
http://upload.wikimedia.org/wikipedi...bsthaltung.gif

Programmiertechnisch braucht man da nichts zu machen, es ist alles eine reine Hardware Lösung.
In der Theorie schaut das in etwa so aus:
Das Scütz ist eigentlich nichts weiter als ein Relais.
Wird der S2 gedrückt, so schaltet das Schütz und schliesst die Verbindung 13/14. Wird der Taster S2 wieder los gelassen so bleibt die Verbindung zwischen 13/14 weiterhin bestehen solange bis S1 gelöst wird. Denn dann verliert das Relais den Strom und öffnet wieder die Verbindung 13/14. An dem Relais kann man mehr als nur ein Gerät schalten. Es steht mindestens noch ein Schaltkreis zur Verfügung den wir nutzen können. Hieran wird nun die 230V Leitung des PC angeschlossen. Der Tster S1 wird durch einen weiteren Relaiskontakt geschaltet. An S2 wird der so gesehen der IOW angeschlossen, bzw. besser gesagt nur der IR-Empfänger. Wir brauchen nur ein einziges mal einen Spannungsanstieg um das Relais K1 zu schalten. Dazu wird der RC5 Code der Fernbedienung nicht genutzt sondern nur das Positive Datensignal. Liegt also am IR Sensor eine Spannung an so schaltet das Relais durch. Jetzt gibt es 2 Möglichkeiten, die eine ist der PC startet automatisch bei anliegen der Spannung. Die andere Möglichkeit wäre durch erweiterung der Schaltung. Schaltet jetzt der PC ein, so wird durch beispielsweise der Power-Led das Relais was hier S1 darstellt geschlossen und die Selbsthaltung ist aktiv. Schaltet der PC sich ab, die Power-LED erlischt und das Relais öffnet sich wieder, die Selbsthaltung schaltet sich wieder ab.
Da PC und die Relais jeweils verzögerungen haben, wird die Schaltung natürlich durch Transistoren und Kondensatoren ersetzt damit genug Zeit bleibt bis der PC wirklich läuft. Kondensatoren sind kleine Energiespeicher. Werden sie Paralell zu den Relais geschaltet werden sie geladen, fällt die Spannung ab so entladen sie sich und liefern noch je nach grösse Spannung um die die Schaltung Temporär zu versorgen damit sichergestellt ist das auch wirklich der PC läuft.
Ich hoffe ich konnte dir das so einigermassen erklären.
Hier noch ein Schaltbild wie es im groben ausschaut mit den Relais.
http://dsnweb.de/schaltung.jpg
So könnte es nachher in etwas aussehen. Da die Schaltung auf 5V ausgelegt wird, kann natürlich der TSOP mit dem IOW im Share stehen. Dazu muss jedoch der IOW ein wenig umgebaut werden, damit dieser unabhängig vom USB auch Spannung bekommt. Zudem könnte man es noch soweit entwickeln das selbst keine Netzversorgung mehr auf dem IOW liegen muss, dieser könnte über einen Akku betrieben werden, dieser lädt sich dann im normal Betrieb wieder auf.


@shmia
Was ist denn an einem CollectionItem und einer Collection auszusetzen gegenüber der ObjectList?
Hier einmal meine Menü Klasse, leider noch mit Fehlern behaftet beim freigeben der Panels.
Delphi-Quellcode:
unit menu_class;

interface

uses
  Classes, Defines, Windows, SysUtils, Controls, Graphics, JvPanel;

type
  TButtonStyle = (etButton, etSeperator, etText);

type
  TMenuEntry = class(TCollectionItem)
  private
    FPanel: TJvPanel;
    FButtonStyle: TButtonStyle;
  public
    destructor Destroy(); override;
    property Button: TJvPanel read FPanel write FPanel;
    property ButtonStyle: TButtonStyle read FButtonStyle write FButtonStyle;
  end;

type
  TMenuEntries = class(TCollection)
  private
    function GetEntry(Index: Integer): TMenuEntry;
  public
    constructor Create;
    destructor Destroy; override;
    function Add(AOwner: TWinControl): TMenuEntry;
    procedure Del(Index: Integer);
    property MenuEntry[Index: Integer]: TMenuEntry read GetEntry;
  end;

type
  TMenuManager = class(TObject)
  private
    FOwner: TWinControl;
    FXPos: Integer;
    FYPos: Integer;
    FTempYPos: Integer;
    FMenuEntries: TMenuEntries;
    FActiveButton: Integer;
    FItemClick: TNotifyEvent;
    function GetAcctiveButton: Integer;
    procedure SetActiveButton(const Value: Integer);
    procedure OnClick(Sender: TObject);
  public
    constructor Create(AOwner: TWinControl; XPos, YPos: Integer);
    destructor Destroy; override;
    procedure AddButton(Caption: String; ButtonStyle: TButtonStyle = etButton);
    procedure RemoveButton(Index: Integer);
    procedure ClearButtons;
    function Count: Integer;
    property ButtonActive: Integer read GetAcctiveButton write SetActiveButton;
    property OnItemClick: TNotifyEvent read FItemClick write FItemClick;
  end;

implementation

{ TMenuManager }

procedure TMenuManager.AddButton(Caption: String;
  ButtonStyle: TButtonStyle);
  var
    AMenuEntry: TMenuEntry;
begin
  Self.FTempYPos := Self.FMenuEntries.Count * 40 + Self.FYPos;

  AMenuEntry := Self.FMenuEntries.Add(Self.FOwner);
  AMenuEntry.FPanel.DoubleBuffered := True;
  AMenuEntry.FPanel.Left := Self.FXPos;
  AMenuEntry.FPanel.Top := Self.FTempYPos;
  AMenuEntry.FPanel.Height := 33;
  AMenuEntry.FPanel.Width := 233;
  AMenuEntry.FPanel.Transparent := True;
  AMenuEntry.FPanel.BevelInner := bvNone;
  AMenuEntry.FPanel.BevelOuter := bvNone;
  AMenuEntry.FPanel.Color := clGray;
  AMenuEntry.FPanel.Alignment := taLeftJustify;
  AMenuEntry.FPanel.Caption := Caption;
  AMenuEntry.FPanel.Font.Color := clBlack;
  AMenuEntry.FPanel.Font.Size := 24;
  AMenuEntry.FPanel.Font.Style := [fsBold];

  if ButtonStyle = etSeperator then
    AMenuEntry.FPanel.BorderWidth := 0
      else AMenuEntry.FPanel.BorderWidth := 1;

  AMenuEntry.FPanel.Parent := FOwner;
  AMenuEntry.FPanel.OnClick := Self.OnClick;
  AMenuEntry.FPanel.Tag := AMenuEntry.Index;

  AMenuEntry.FButtonStyle := ButtonStyle;
end;

procedure TMenuManager.ClearButtons;
begin
  while Self.FMenuEntries.Count > 0 do begin
    Self.FMenuEntries.Del(Self.FMenuEntries.Count -1);
    end;
end;

function TMenuManager.Count: Integer;
begin
  Result := Self.FMenuEntries.Count;
end;

constructor TMenuManager.Create(AOwner: TWinControl; XPos, YPos: Integer);
begin
  inherited Create;

  Self.FOwner := AOwner;
  Self.FXPos := XPos;
  Self.FYPos := YPos;
  Self.FTempYPos := Self.FYPos;
  Self.FActiveButton := -1;

  Self.FMenuEntries := TMenuEntries.Create;
end;

destructor TMenuManager.Destroy;
begin
  Self.ClearButtons;
  Self.FMenuEntries.Destroy;

  inherited Destroy;
end;

function TMenuManager.GetAcctiveButton: Integer;
begin
  Result := Self.FActiveButton;
end;

procedure TMenuManager.OnClick(Sender: TObject);
begin
  if Assigned(FItemClick) then begin
    if Sender is TJvPanel then begin
      Self.SetActiveButton(TJvPanel(Sender).Tag);
      //Self.FActiveButton := TJvPanel(Sender).Tag;
      OnItemClick(Self);
      // <-- panel existiert nicht mehr
      end;
    end; // hier error!!!!!!!!!!!!!!!!!
end;

procedure TMenuManager.RemoveButton(Index: Integer);
begin
  Self.FMenuEntries.Del(Index);
end;

procedure TMenuManager.SetActiveButton(const Value: Integer);
  var
    AMenuEntry: TMenuEntry;
begin
  if Value = -1 then
    Exit;
    
  AMenuEntry := Self.FMenuEntries.MenuEntry[Value];

  if (AMenuEntry <> nil) and (Value <> Self.FActiveButton) then begin
    if AMenuEntry.ButtonStyle = etButton then begin
      AMenuEntry.FPanel.Color := clYellow;
      if Self.FActiveButton > -1 then
        Self.FMenuEntries.MenuEntry[Self.FActiveButton].FPanel.Color := clGray;
      Self.FActiveButton := Value;
      end;
    end;
end;

{ TMenuEntries }

function TMenuEntries.Add(AOwner: TWinControl): TMenuEntry;
begin
  Result := inherited Add as TMenuEntry;

  Result.FPanel := TJvPanel.Create(AOwner);
  Result.FPanel.Parent := AOwner;
end;

constructor TMenuEntries.Create;
begin
  inherited Create(TMenuEntry);

end;

procedure TMenuEntries.Del(Index: Integer);
begin
  Self.GetEntry(Index).Free;
end;

destructor TMenuEntries.Destroy;
begin

  inherited Destroy;
end;

function TMenuEntries.GetEntry(Index: Integer): TMenuEntry;
begin
  Result := inherited Items[Index] as TMenuEntry;
end;

{ TMenuEntry }

destructor TMenuEntry.Destroy;
begin
  Self.FPanel.Free;

  inherited Destroy;
end;

end.
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#12

Re: Media Center entwickeln

  Alt 26. Jan 2008, 01:17
Mal eine kleine Nebenfrage...

Meine Panel besitzen die Eigenschaft OnClick und reagieren auch auf den Click der Fernbedienung.
Beim leeren der Menüliste bekomme ich natülich eine AV. Er ist noch in der Procedure drin aber eigentlich existiert das Objekt nicht mehr. Wie könnte ich das umgehen?

Delphi-Quellcode:
procedure TMenuManager.OnClick(Sender: TObject);
begin
  if Assigned(FItemClick) then begin
    if Sender is TJvPanel then begin
      Self.SetActiveButton(TJvPanel(Sender).Tag);
      //Self.FActiveButton := TJvPanel(Sender).Tag;
      OnItemClick(Self);
      // <-- panel existiert nicht mehr
      end;
    end; // hier error!!!!!!!!!!!!!!!!!
end;
mit OnItemClick wird folgendes aufgerufen

Delphi-Quellcode:
procedure TMain_Frm.SelectPressed;
  var
    I: Integer;
begin
  case Self.FCC.PlayerMode of
    // Hauptmenü
    pmMain: begin
                    case Self.FMenuManager.ButtonActive of
                      // Musik Menü aktiv setzen
                      0: begin
                          Self.FOSD.Show('Musik Modus', 2000);
                          Self.FCC.PlayerMode := pmMusik;
                          Self.FMenuManager.ClearButtons;
                          end;
                      // DVD Menü aktiv setzen
                      1: begin
                          Self.FOSD.Show('DVD Modus', 2000);
                          Self.FCC.PlayerMode := pmDVD;
// Self.FMenuManager.ClearButtons;
                          for I := Self.FMenuManager.Count -1 downto 0 do
                            Self.FMenuManager.RemoveButton(I);
                          end;
Er springt nachher in das OnClick Ereignis zurück und dort kommt die AV.

Weiß jemand eine saubere Lösung womit ich sie auch wieder entfernen kann?
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#13

Re: Media Center entwickeln

  Alt 21. Mai 2008, 23:45
Hallo,

Ist schon etwas her aber ich hatte mal wieder Zeit und hab alles ein wenig umgebaut.
Eigentlich habe ich den bisherigen Ansatz komplett über den Haufen geschmissen.

Mittlerweile Arbeite ich um die Oberfläche zu erstellen mit Andorra 2D.
Bisher sieht es auch noch mehr nach einer Kopie von Media Portal aus aber das ist ja nur ein Skin.
Das ist bisher auch nur ein Test.

Das komplette System bietet keine Maussteuerung sondern nur über Plugins und Tastatur.
Die wesentliche Steuerung soll nur 5 Tasten/Zustände kennen(links, rechts, hoch, runter, auswählen)

Beim ersten Versuch hatte ich eigentlich nur das Menü, dort war die steuerung nicht sonderlich schwer.
Jetzt habe ich aber neben dem Menü auch noch andere "Buttons". Wie könnte man das am besten programmiertechnisch umsetzen mit den Tasten? Wenn das Menü aktiv ist, kann man mit hoch, runter das Menü steuern. Mit links, rechts sollte man dann von dem Menü auf die anderne "Buttons" kommen, hier wäre das Schliessen, wechsel von Fenster auf Vollbild und Herunterfahren.

Hatte persönlich jetzt etwas im Kopf das ich eine Mutterklasse habe TMediaObject von dort aus werden alle anderen Elemente abgeleitet, TMediaMenuObject, TMediaButton, usw. Dann eine Klasse mit einer Liste die alle MediaObjecte beinhaltet und pro Object die Tasten die man nutzen kann und auf das "Nachbar" Object verweisen. Zusätzlich übernimmt die Klasse auch das abfangen der Tastendrücke und leitet sie an das entsprechende Object weiter bzw. von dort zum nächsten.
Kleiner Nachteil, es müsste alles im Skin hinterlegt sein...

Das ist halt meine Idee, die Frage, ist das ne gute Idee oder gibt es da bessere Lösungen, sofern das überhaupt eine gute Lösung wäre.

Gruß

Cyberaxx
Miniaturansicht angehängter Grafiken
screenshot_723.jpg  
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat
rotfc
(Gast)

n/a Beiträge
 
#14

Re: Media Center entwickeln

  Alt 22. Mai 2008, 03:38
Zitat von Cyberaxx:
Hallo...
Das komplette System bietet keine Maussteuerung sondern nur über Plugins und Tastatur.
Die wesentliche Steuerung soll nur 5 Tasten/Zustände kennen(links, rechts, hoch, runter, auswählen)...
Cyberaxx
Fünf Tasten (noch dazu ohne Maus!) wären mir etwas zu wenig

Eine Taste für [Abbrechen] und eine weitere für [Zurück zum Hauptmenü} wären für mich unverzichtbar.

Wenn man einem Dreieck noch ein paar/viele Ecken mehr verpasst, könnte sich daraus fast etwas "Rundes" entwickeln, vergleichbar mit einem Rad. Warum von Vorne mit dem Dreieck anfangen?

Ist nicht böse, sondern eher fragend gemeint.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#15

Re: Media Center entwickeln

  Alt 22. Mai 2008, 06:52
Hai Cyberaxx,

hänge das Bild bitte als Anhang an deinen Post. Zum einen möchte sich nicht jeder die 40 kB runterladen müssen und zum anderen kann es sein das es irgendwann nicht mehr auf dem Server liegt und dann sieht das ganze nicht mehr "schön" aus.

Danke.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#16

Re: Media Center entwickeln

  Alt 22. Mai 2008, 10:14
Das es keine Mausunterstützung hat ja seinen Sinn, für mich zumindest. Es läuft ausschliesslich auf dem TV, ich sitz auf der Couch und da habe ich sicher keine Lust mit der Maus zu spielen. Ich habe also meist nur eine Fernbedienung. Da ich die Maussteuerung eh selber umsetzen müßte wird sie nicht mit eingebaut. Ich denke mal wenn es soweit ist könnte man dies über ein Plugin lösen.

Zitat von rotfc:
Fünf Tasten (noch dazu ohne Maus!) wären mir etwas zu wenig

Eine Taste für [Abbrechen] und eine weitere für [Zurück zum Hauptmenü} wären für mich unverzichtbar.
Da habe ich mich etwas falsch ausgedrückt, die 5 Tasten sind nur zur reinen Menü Steuerung. [Abbrechen], [Zurück zum Hauptmenü]
haben ja nichts mit der Objektsteuerung zu tun sondern sind an die "Form" gebunden.
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat
beckz

Registriert seit: 27. Apr 2005
15 Beiträge
 
#17

Re: Media Center entwickeln

  Alt 5. Jun 2008, 16:02
hört sich ziemlich interessant an!

kannst du mal die sourcen hochladen!

dann kann man sich mehr darunter vorstellen?

idee und design find ich super!

mfg
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#18

Re: Media Center entwickeln

  Alt 5. Jun 2008, 16:09
Naja das Design ist ein wenig von Media Portal abgeschaut.

Da ich mit der 3D Umsetzung noch nicht zufrieden bin gibt es da leider noch nicht viel was man hochladen könnte, ich sitze gerade daran das ich die Menüsteuerung hinbekomme ohne Maus.
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 06:39 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