Thema: Delphi Winamp Skin für Gen.bmp

Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#1

Winamp Skin für Gen.bmp

  Alt 8. Okt 2006, 22:52
Hier mal meine art einen Skin für Winamp zu schreiben!
Mein erstes reales Projekt in Delphi
Nix Copy/Paste alles von Hand !!!

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!

Gruß
  Mit Zitat antworten Zitat