Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Winamp Skin für Gen.bmp (https://www.delphipraxis.net/78651-winamp-skin-fuer-gen-bmp.html)

EWeiss 8. Okt 2006 22:52


Winamp Skin für Gen.bmp
 
Hier mal meine art einen Skin für Winamp zu schreiben!
Mein erstes reales Projekt in Delphi ;)
Nix Copy/Paste alles von Hand !!! :-D

Delphi-Quellcode:
unit frmGen;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, IniFiles, StdCtrls;

type
  Tfrm_Gen = class(TForm)
    picMap: TImage;
    picTopL: TImage;
    picTopF: TImage;
    picTopText: TImage;
    picTopM: TImage;
    picTopStretch: TImage;
    picTopC: TImage;
    picBorderL: TImage;
    picBottomL: TImage;
    picBottomR: TImage;
    picBottomM: TImage;
    picClose: TImage;
    picTopTextSrc: TImage;
    picBorderR: TImage;
    picFormResize: TImage;
    picMapSrc: TImage;
    pBack: TPanel;
    procedure picFormResizeMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure picCloseMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure picBottomMMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure picFormResizeMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure picFormResizeMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure picTopFMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormDestroy(Sender: TObject);
    procedure picTopLMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure picTopMMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure picTopStretchMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure picTopMDblClick(Sender: TObject);
    procedure picCloseClick(Sender: TObject);
    procedure picCloseMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure picTopTextSrcMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure picBottomMDblClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormResize(Sender: TObject);
  private
    procedure LoadSkin;
    procedure ImageCopy;
    procedure ScaleScreen;

    procedure picBottomM_Resize;
    procedure picTopText_Resize;
    procedure picTopStretch_Resize;
    procedure StandardSize;
    function GetBitArray(StrView: String): Integer;

    procedure SetImage(Destination : TImage; x: Integer;
                                               y: Integer;
                                               W : Integer;
                                               H : Integer;
                                               Source : TImage;
                                               startX : Integer;
                                               StartY : Integer);
    procedure ChangeGenPos;
    function MidStr(Const Str: String; From, Size: Word): String;
    function RightStr(Const Str: String; Size: Word): String;
    function LeftStr(Const Str: String; Size: Word): String;
    function SetFullWindowDrag(hwnd: DWORD; ShowFullWindow: Boolean): Boolean;
    procedure MouseTrap(Sender: TObject; X, Y: Integer);
    procedure MouseTrap_Release;
  public

  end;

  TSplitStrArray = array of String;
  function Split(const Source, Delimiter: String): TSplitStrArray;

var
  frm_Gen   : TForm;
  i         : Integer;
  picW      : Integer;
  fTimer    : Single;
  Prg       : String;
  Sect      : String;
  OptDefPath : String;

  FormFlag  : Boolean;
  FX        : Integer;
  FY        : Integer;
  FormFirst : Boolean;
  AX        : Integer;
  AY        : Integer;
  PicMapDC  : hdc;


implementation

{$R *.dfm}

procedure Tfrm_Gen.ChangeGenPos;
Begin
    picBottomM_Resize;
    picTopText_Resize;
    picTopStretch_Resize;

End;



function Tfrm_Gen.GetBitArray(StrView: String): Integer;
Var
 IntI        : Integer;    //Zähler
 StrPosX     : String;     //X Position im Bitmap
 StrPosW     : String;     //Weite des Buchstaben
 IntPos      : Integer;    //Zähler für die Buchstabenweite

 DelemiterCol : TCOLOR;     //Delemiter als Farbe
 IntDelPos   : Integer;    //Aktuelle Delemiter Position
 ColFound    : Boolean;    //Farbe gefunden, ergebnis = Buchstabenweite
 BWidth      : Variant;    //Resultat der gefundenen Buchstabenweiten Spliten
 PosX        : Variant;    //
 NewPos      : Integer;
 StrS        : String;
 IntX        : Integer;
 image       : TImage;
 begin
    IntPos := 0;
    IntDelPos := 0;
    ColFound := False;

    PicMapDC := PicMap.Picture.Bitmap.Canvas.Handle;
    //******************** Schleife zum ermitteln der Buchstabenweite *********************
    ///////////////////////////////////////////////////////////////////////////////////////
    //Ermitteln der Delemiter Farbe
    DelemiterCol := GetPixel(PicMapDC, 0, 88);

    //Schleife durchlaufen bis 26* die Delemiter Farbe gefunden wurde
    For IntI := 1 To picMap.Width do
        begin
        //Raus hier wenn Farbe 26* gefunden
        If IntDelPos = 26 Then Break;

        //Aktuelle Position der Buchstabenweite um eins erhöhen
        inc(IntPos);
        //Wenn aktuelle position im Bitmap die gleiche Farbe
        //enthält wie DelemiterCol ..
        If GetPixel(PicMapDC, IntI, 88) = DelemiterCol Then
            begin
            If IntDelPos <= 24 Then
              begin
                //Position zum StrPosX addieren und Delemiter komma anhängen
                StrPosX := StrPosX + IntToStr(IntI) + ',';
              end
             Else
                //Letze Position zum StrPosX addieren ohne Delemiter
                StrPosX := StrPosX + IntToStr(IntI);
            //Zähler für Farbe um eins erhöhen
            inc(IntDelPos);
            //Farbe gefunden
            ColFound := True;
            End;
        //wenn Farbe gefunden
        If ColFound Then
          begin
            //weite des Buchstaben zum StrPosW addieren
            If IntDelPos <= 25 Then
             begin
.
Rest siehe unten Code-Sample..
Vorsicht hier wird SetFullWindowDrag verwendet! :-D

Gruß

Daniel G 8. Okt 2006 22:56

Re: Winamp Skin für Gen.bmp
 
Das als komplettes Projekt im Anhang und ich hätte sogar Lust, es auszuprobieren.. :wink:

EWeiss 8. Okt 2006 23:03

Re: Winamp Skin für Gen.bmp
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Daniel G
Das als komplettes Projekt im Anhang und ich hätte sogar Lust, es auszuprobieren.. :wink:

Sollst du haben ;)
Hoffe es kommt ein kommentar deinerseits :-D

Sind noch verschiedene Gen.bmp's im Ordner umbenennen und neu starten zum testen.

gruß

zahor 9. Okt 2006 17:11

Re: Winamp Skin für Gen.bmp
 
Ich verstehe nicht wie ich da ein eigenes Formular machen kann,
bei mir kommt immer das gleiche Fenster.
Kann mir da wer weiterhelfen?
Habe hier Delphi 2005 Personal, sonst noch Delphi 7 Enterprise.
Wäre echt toll!

//Edit:
Vielleicht sollte ich meine Frage auch so formulieren:
Wei kann ich eigene Projekte mit diesem Skin machen?

EWeiss 9. Okt 2006 17:19

Re: Winamp Skin für Gen.bmp
 
Liste der Anhänge anzeigen (Anzahl: 3)
Zitat:

Zitat von zahor
Ich verstehe nicht wie ich da ein eigenes Formular machen kann,
bei mir kommt immer das gleiche Fenster.
Kann mir da wer weiterhelfen?
Habe hier Delphi 2005 Personal, sonst noch Delphi 7 Enterprise.
Wäre echt toll!

um was geht es denn ?
Also ich habe 3..


gruß

zahor 9. Okt 2006 17:29

Re: Winamp Skin für Gen.bmp
 
Na wie ich ein Programm machen kann, das diesen Skin benutzt,
d.h. dass in dem Fenster aus deiner Demo noch Inhalt reinkommt.
So einfach ein eigenes Programm, das so aussieht wie dioe Demo,
aber natürlich noch einen Sinn hat.

Ich hoffe diesmal habe ich mich klar genug ausgedrückt,
trotzdem Danke für die schnelle Antwort!

//Edit:
Na welcher Skin ist erstmal egal, nur dass es einer von deinen ist ich mir im Moment wichtig

EWeiss 9. Okt 2006 17:30

Re: Winamp Skin für Gen.bmp
 
Wenn du einen MediaPLayer schreiben willst
Dann benötigst du auch noch die anderen Skins von Winamp!

Dafür gibt es aber meines erachtens fertige Komponente.
Wenn auch nicht vollständig.!


gruß

EWeiss 9. Okt 2006 17:36

Re: Winamp Skin für Gen.bmp
 
Zitat:

Zitat von zahor
Na wie ich ein Programm machen kann, das diesen Skin benutzt,
d.h. dass in dem Fenster aus deiner Demo noch Inhalt reinkommt.
So einfach ein eigenes Programm, das so aussieht wie dioe Demo,
aber natürlich noch einen Sinn hat.

Ich hoffe diesmal habe ich mich klar genug ausgedrückt,
trotzdem Danke für die schnelle Antwort!

//Edit:
Na welcher Skin ist erstmal egal, nur dass es einer von deinen ist ich mir im Moment wichtig

Also der Gen Skin wird bei Winamp als eine art Container für Visualisierungen, InputPlugins usw... benutzt.
Winamp5 Plugins haben keinen eigenen Rahmen mehr dafür wird gen.bmp verwendet.

Theoretisch kannst du so damit nichts anfangen.
Ist für Leute die als beispiel meine 'Bass_PlgWrapper.dll/BassVis.dll' benutzen.

Die können dann Winamp5 Visualisierungen in diesen Fenster darstellen.

gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 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