Avatar billede fun22 Nybegynder
06. juli 2003 - 10:25 Der er 13 kommentarer og
1 løsning

Skins hvordan?

Hej

Jeg er ved at lave en mp3 afspiller men hvordan laver jeg en skins funktion? Jeg har prøvet to komponenter men de virkede ikke sælig godt. Det skal være hvor man kan lave skins til alle ting, og skinsne skal så efterfølgende ligge i en mappe for sig. Hvordan gør man det?
Avatar billede zerohero Nybegynder
06. juli 2003 - 11:56 #1
Bare vær kreativ! Jeg tror ikke der findes en enstemmet løsning på dette. Skins er vel i bund og grund bare nogle TBitmaps der repræsentere de forskellige komponenter, så som TButtons og TSliders osv. Så hvorfor ikke bare lægge ud med at brugeren kan indlæse forskellige billeder fra harddisken og bruge dem som skins!

Held og Lykke
ZeroHero
Avatar billede fun22 Nybegynder
06. juli 2003 - 13:11 #2
Dav igen :)

Problemet med det er at jeg ikke kan lægge billeder på en slider, listboxe og lignende.
Avatar billede zerohero Nybegynder
06. juli 2003 - 13:27 #3
Selvfølig kan du det bare brug canvas'en!
Avatar billede fun22 Nybegynder
06. juli 2003 - 13:30 #4
a hva? Kan du forklare hvordan man bruger det?
Avatar billede zerohero Nybegynder
06. juli 2003 - 13:32 #5
Ja da... laver lige et eksempel til dig (hold på!!!)
Avatar billede fun22 Nybegynder
06. juli 2003 - 13:38 #6
Ok du akn sende det til jtp@home2.gvdnet.dk
Avatar billede zerohero Nybegynder
06. juli 2003 - 13:46 #7
Hvis en komponent ikke har en Public Canvas, kan du selv lave en Canvas og sætte den ovenpå komponenten. Det vil resultere i at komponenten's "Standard" Canvas vil blive "OverRided" (overskrevet). Her er et eksempel hvor du har en ganske almindelig TButton og en TOpenDialog. Når du trykker på knappen vil en Åbn-Fil-Dialog vises, hvor du kan vælge en Bitmap fil. Den Bitmap fil du vælger vil blive tegnet på knappen når du trykker "OK" og dermed lukker dialog-boksen.


procedure TForm1.Button1Click(Sender: TObject);
var
  MyCanvas : TControlCanvas;
  MyBitmap : TBitmap;
begin
  MyCanvas := TControlCanvas.Create;
  MyBitmap := TBitmap.Create;

  MyCanvas.Control := TControl(Button1);

  if OpenDialog1.Execute then
  MyBitmap.LoadFromFile(OpenDialog1.Filename);

  MyCanvas.Draw(0,0,MyBitmap);

  MyCanvas.Free;
  MyBitmap.Free;
end;

ZeroHero
Avatar billede fun22 Nybegynder
06. juli 2003 - 13:55 #8
når jeg gør det du lige har skrevet forsvinder billeder igen når jeg gør slideren aktiv. og ved button1 sker der slet ingen ting
Avatar billede zerohero Nybegynder
06. juli 2003 - 14:24 #9
Ja det er korrekt. Fordi komponentens "Standard" Canvas ligger stadig under vores Canvas og bliver automatisk opdateret af komponenten selv og dermed tegner over vors Canvas. Dette kan løses på utallige måder her er et eksempel(Dog stadig med vores TButton):

//Definere en "Global" Canvas og Bitmap
var
  MyCanvas : TControlCanvas;
  MyBitmap : TBitmap;
//Skaber en Canvas og en Bitmap
//assigner derefter Button1 som Control til vors Canvas
procedure TForm1.FormCreate(Sender: TObject);
begin
  MyCanvas := TControlCanvas.Create;
  MyBitmap := TBitmap.Create;
  MyCanvas.Control := TControl(Button1);
end;

//Åbner en bitmap fra hardisken
procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  MyBitmap.LoadFromFile(OpenDialog1.Filename);
end;

//En timer opdatere vores Canvas hele tiden ved at tegne
//bitmapen på vores canvas
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  MyCanvas.Draw(0,0,MyBitmap);
end;

//Fri giver vore Canvas og Bitmap fra hukommelsen
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  MyCanvas.Free;
  MyBitmap.Free;
end;

ZeroHero
Avatar billede fun22 Nybegynder
07. juli 2003 - 17:28 #10
det virker ikke på en trackbar og det skal det. Knapperne har jeg billeder på.
Avatar billede zerohero Nybegynder
07. juli 2003 - 17:59 #11
Bruger du Delphi's TTrackBar ?
Avatar billede zerohero Nybegynder
07. juli 2003 - 17:59 #12
Og hvad er det ved det der ikke virker?
Avatar billede fun22 Nybegynder
07. juli 2003 - 18:42 #13
ja jeg bruger TTrackbar. Kan du ikke lave et eksempel hvor der ligger et billede oven på baren?
Avatar billede zerohero Nybegynder
07. juli 2003 - 20:51 #14
Det er altså bare et spørgsmål om at være kreativ nok! Her har jeg lavet så en ny Slide design vil blive tegnet ovenpå den gamle TrackBar design, så du kan se ideén med det. Nu er det så op til dig at passe det ind på nøjagtigt den måde du vil have det. Egenligt er den identisk med koden jeg viste dig tidligere, bortset fra at Button1 er blevet erstattet med TrackBar1 som CanvasControl og at Timeren referere til TegnTrackBar hele tiden.

//Definere en "Global" Canvas og Bitmap
var
  MyCanvas : TControlCanvas;
  MyBitmap : TBitmap;
//Skaber en Canvas og en Bitmap
//assigner derefter TrackBar1 som Control til vores Canvas
procedure TForm1.FormCreate(Sender: TObject);
begin
  MyCanvas := TControlCanvas.Create;
  MyBitmap := TBitmap.Create;
  MyCanvas.Control := TControl(TrackBar1);
end;

//Tegner ny design oven på den gamle TrackBar design!!!
procedure TForm1.TegnTrackBar(Sender: TObject);
var
  TrackPos : Integer;
begin
  if TrackBar1.Visible then
  with MyBitmap do
  begin
    Width := TrackBar1.Width;
    Height := TrackBar1.Height;
    //Tegn Vandret...
    if TrackBar1.Orientation = trHorizontal then
    begin
      with Canvas do
      begin
        //Tegner baggrunden grå
        Brush.Color := clBtnFace;
        FillRect(TrackBar1.ClientRect);
        //Tegner vandret Slide
        Pen.Color := clBtnShadow;
        MoveTo(7,12);
        LineTo(TrackBar1.Width-12,12);
        Pen.Color := clBtnHighLight;
        MoveTo(7,13);
        LineTo(TrackBar1.Width-12,13);
      end;

      //Hvis TrackBarens Slider er sat synlig tegn selve Baren...
      if TrackBar1.SliderVisible then
      begin
        //Beregner position af Baren
        with TrackBar1 do
        TrackPos := ((Width-14) div (Max-Min))* (Position-Min);
        //Tegner Baren med functionen: DrawButtonFace fra "Buttons.pas"
        with TrackBar1 do
        DrawButtonFace(MyBitmap.Canvas,Rect(TrackPos+7,5,TrackPos+17,Height div 2),1,bsNew,False,False,False);
      end;
    end
    else
      //Tegn Lodret...
      //Her kan du så selv gå i krig med et eller andet...
      MyBitmap.Canvas.TextOut(0,0,'Tegn...');
  end;
end;

//En timer opdatere vores Canvas hele tiden ved at tegne
//bitmapen på vores canvas
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  TegnTrackBar(nil); //Referer til TegnTrackBar
  MyCanvas.Draw(0,0,MyBitmap);
end;

//Fri giver vore Canvas og Bitmap fra hukommelsen
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  MyCanvas.Free;
  MyBitmap.Free;
end;

Held og Lykke
ZeroHero
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester