Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#48

Re: Code strukturieren! Wie macht man es richtig ..

  Alt 14. Okt 2008, 03:06
Nochmal zur vervollständigung
Meine Klasse
Delphi-Quellcode:
unit uImageButton;

interface
uses Windows, Classes, Messages;

type
  TSkinImageButton = class
  private
    FHImageButton : HWND;
    Img : Cardinal;
    Style : DWORD;
    btW : Integer;
    btH : Integer;
    function GetHandle: Integer;
  public
    property ButtonHandle: Integer read GetHandle;
    constructor Create(hOwner : HWND; FullPathImageName: PAnsiChar;
      x ,y, ButID, StateMax: Integer);
    destructor Destroy; override;

  end;

implementation
uses uSkin;

// Erstelle einen image button
constructor TSkinImageButton.Create;
begin

    with SkinEngine do
    begin
      if RegisterButton(SKBUTIMAGE) then
      begin
        // Erstelle das GDIPLUS image vom Dateinamen
        Img := AddResource((FullPathImageName));
        if Img <> 0 then
        begin
          GetImageSize(Img, imgW, imgH);
          // Wird kein StateMax angegeben sind die Bilder im Bild 5 Frames
          // ansonsten werden sie durch die übergebene anzahl geteilt
          if StateMax < 1 then
            StateMax := 5;
          btW := integer(imgW) div StateMax;

          btH := imgH;
          Style := WS_CHILD or WS_VISIBLE or WS_TABSTOP or BS_PUSHBUTTON;
          if ButID = ID_LED then
            Style := Style or WS_DISABLED;

          // das Window für die Button's erstellen
          FHImageButton := CreateWindowEx(WS_EX_TRANSPARENT, SKBUTIMAGE, '',
            Style, x, y, btW, btH, hOwner, ButID, sInstance, nil);
          if FHImageButton <> 0 then
          begin
            // Speichere das Img handle als property
            SetImageProperty(FHImageButton, PROP_IMAGE, integer(Img));
            SetImageProperty(FHImageButton, PROP_STYLE, BS_BITMAP);
            SetImageProperty(FHImageButton, PROP_STATEMAX, StateMax);
          end else
          begin
            // Lösche das Image
            DeleteResource(Img);
          end;
        end;
      end;
    end;
end;

destructor TSkinImageButton.Destroy;
begin
  // tue nix
  // das löschen aller resourcen wird an anderer stelle ausgeführt
  // Sample:
    {SkinEngine.RemoveAllImageResource;
     SkinEngine.DestroyWindowResource(WinHandle);}


  inherited Destroy;
end;

function TSkinImageButton.GetHandle: Integer;
begin
  Result := FHImageButton;
end;

end.
Die wird als uses in uSkin eingebunden
uses uImageButton;
Die Controls sollen nur aus dieser Klasse heraus verwaltet werden.
Was ich damit meine ist ich will sie nicht nochmal zusätztlich in der MainUnit mit einbinden
wie muss ich die Klasse dann in uSkin einbinden damit ich nur über die Engine auf das Control zugreifen kann.

Zur zeit läuft es so
Delphi-Quellcode:
  BugButton: TSkinImageButton;
  PlayButton: TSkinImageButton;
  LeftButton: TSkinImageButton;
  RightButton: TSkinImageButton;
  HelpButton : TSkinImageButton;
geht aber nur wenn ich, wie schon gesagt die uImageButton in uMainApp mit einbinde.

gruss Emil
  Mit Zitat antworten Zitat