AGB  ·  Datenschutz  ·  Impressum  







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

abgeleitete Trackbar mit Bitmaps

Ein Thema von bluescreen25 · begonnen am 15. Okt 2006 · letzter Beitrag vom 15. Okt 2006
Antwort Antwort
bluescreen25

Registriert seit: 27. Nov 2005
Ort: Geldern
229 Beiträge
 
Delphi 7 Enterprise
 
#1

abgeleitete Trackbar mit Bitmaps

  Alt 15. Okt 2006, 15:25
Habe heute versucht eine Ableitung der Trackbar für die Einbindung von Bitmaps zu erstellen.
Die Grafik soll durch eine eigene ersetzt werden.

Vielleicht schaut jemand mal darüber:
Delphi-Quellcode:
unit ImgTrb;

interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, ComCtrls, StdCtrls, QGraphics;

type
  TTBItem = (tbThumb, tbChannel, tbTicks);
  TTrackBar2 = class(TTrackBar)
  private
    fBackBmp : TBitmap;
    fSliderBmp : TBitmap;
    fTransparentColor : TColor;
    procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY;
    function DrawItem(aCanvas: TCanvas;aRect: TRect; aItem: TTBItem): Boolean;

  protected
    {..}
  public
    {..}
  published
    {..}
  end;

implementation


function TTrackBar2.DrawItem(aCanvas: TCanvas;aRect: TRect; aItem: TTBItem): Boolean;
begin
  result := false;
  case aItem of
    tbChannel:
      begin
        if (not fBackBmp.Empty) and (fBackBmp.Width > 0) and(fBackBmp.Height > 0) then begin
          TransparentBlt(aCanvas.Handle, aRect.Left, aRect.Top,(aRect.Right - aRect.Left),
                         (aRect.Bottom - aRect.Top), //<---- Fehlermeldung Inkompatible Typen !
                         fBackBmp.Canvas.Handle, 0, 0, fBackBmp.Width, fBackBmp.Height,
                         fTransparentColor);
          result := true;
        end;
      end;
    tbThumb:
      begin
        if (not fSliderBmp.Empty) and (fSliderBmp.Width > 0) and(fSliderBmp.Height > 0) then begin
          TransparentBlt(aCanvas.Handle, aRect.Left, aRect.Top,(aRect.Right - aRect.Left),
                         (aRect.Bottom - aRect.Top),
                         fSliderBmp.Canvas.Handle, 0, 0, fSliderBmp.Width, fSliderBmp.Height,
                         fTransparentColor);
          result := true;
        end;
      end;
  end;
end;




procedure TTrackBar2.CNNotify(var Message: TWMNotify);
var
  lRect : TRect;
  lCanvas : TCanvas;
  lIsDrawn : Boolean;

begin
  if (Message.NMHdr^.code = NM_CUSTOMDRAW) then begin
    with PNMCustomDraw(Message.NMHdr)^ do begin
      (* Default-Result für Standard-Zeichnen setzen *)
      Message.Result := CDRF_DODEFAULT;

      case dwDrawStage of
        CDDS_PREPAINT:
          begin
            (* wichtig !, damit künftig ItemDraw-Messages gesendet werden *)
            Message.Result := CDRF_NOTIFYITEMDRAW or CDRF_NOTIFYPOSTPAINT;
          end;

        CDDS_ITEMPREPAINT:
          begin
            lCanvas := TCanvas.Create;
            lCanvas.Handle := hdc;
            lRect := rc;
            try
              try
                lIsDrawn := false;
                case dwItemSpec of
                  (* Trackbar-Teile selbst zeichnen *)
                  TBCD_THUMB : lIsDrawn := DrawItem(lCanvas, lRect, tbThumb);
                  TBCD_TICS : lIsDrawn := DrawItem(lCanvas, lRect, tbTicks);
                  TBCD_CHANNEL : lIsDrawn := DrawItem(lCanvas, lRect, tbChannel);
                end;
                (* verhindern, dass Standard gezeichnet wird *)
                if lIsDrawn then Message.Result := CDRF_SKIPDEFAULT;

              (* sicher ist sicher, dass der Teil dargestellt wird, falls ein
                 Fehler aufgetreten ist                                      *)

              except
                Message.Result := CDRF_DODEFAULT;
              end;
            finally
              lCanvas.Handle := 0;
              lCanvas.Free;
            end;
          end;
      end;
    end;

  end else inherited;
end;

end.
hier die Fehlermeldung: Inkompatible Typen:HDC und QPainterH
Delphi-Quellcode:
TransparentBlt(aCanvas.Handle, aRect.Left, aRect.Top,(aRect.Right - aRect.Left),
                         (aRect.Bottom - aRect.Top),
Ursprünglich ist es ein Vorschlag von hier: Link



Viele Grüße,bluescreen25
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: abgeleitete Trackbar mit Bitmaps

  Alt 15. Okt 2006, 16:51
Hallo,

wenn du die Unit QGraphics wirklich brauchen solltest, dann musst du Windows.TransparentBlt() aufrufen - ansonsten einfach QGraphics aus der Uses-Klausel entfernen.

Grüße vom marabu
  Mit Zitat antworten Zitat
bluescreen25

Registriert seit: 27. Nov 2005
Ort: Geldern
229 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: abgeleitete Trackbar mit Bitmaps

  Alt 15. Okt 2006, 16:56
Zitat von marabu:
Hallo,

wenn du die Unit QGraphics wirklich brauchen solltest, dann musst du Windows.TransparentBlt() aufrufen - ansonsten einfach QGraphics aus der Uses-Klausel entfernen.

Grüße vom marabu
Ich kenne mich wirklich nicht mit den Grafiken aus, habe bisher anderes gemacht.

Entferne ich QGraphics, dann ist folgendes ein undefinierter Bezeichner....
NM_CUSTOMDRAW PS die Units oben einzusetzen, waren alles Versuche es am laufen zu bewegen...

Grüße bluescreen25
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:10 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