AGB  ·  Datenschutz  ·  Impressum  







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

An Property zwei werte übergeben

Ein Thema von EWeiss · begonnen am 2. Jul 2012 · letzter Beitrag vom 3. Jul 2012
 
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: An Property zwei werte übergeben

  Alt 2. Jul 2012, 22:45
property BlinkOnRW[WinHandle: HWND]: Boolean read GetBlinkOn write SetBlinkOn;

Ich denke mal das wäre die lösung gewesen

Ich habe es jetzt über das normale property geregelt mit etwas tricksen.
Dazu habe ich eifach das Sourcehandle und den Rect als privat in meine Classe verschoben.

Und so geht es dann!

Delphi-Quellcode:
procedure TSkinImageButton.ButtonBlink(WinHandle: HWND; OnBlink: Integer);
var
  Img: Cardinal;
  hDC: Cardinal;
  graphics: Cardinal;
  rw : TRect;
  lp :TPoint;
  ImgW, ImgH: Cardinal;

begin

    if FBlinkOn then
      SetBlinkOn(false);

    FTimer.Free;

    SetBlinkOn(true);
    FTimer := TTimer.Create(nil);
    FTimer.Interval := OnBlink;
    FTimer.OnTimer := TimerTimer;


    Img := SkinEngine.GetButImageBackProperty(WinHandle);

    SkinEngine.GetImageSize(Img, ImgW, ImgH);

    GetWindowRect(WinHandle, rw);
    lp.x := rw.Left;
    lp.y := rw.Top;

    SrcHandle := GetParent(WinHandle);
    ScreenToClient(SrcHandle, lp);

    if UseState < 2 then
      UseState := 2
    else
    UseState := 1;

    if FBlinkOn then
      UseState := 2;

    hDC := GetDC(SrcHandle);

    SetRect(rc, lp.x, lp.y, lp.x + rw.Right - rw.Left, lp.y + rw.Bottom - rw.Top);

    if GdipCreateFromHDC(hDC, graphics) = OK then
    begin
      GdipDrawImageRectRectI(Graphics, Img,
        lp.x, lp.Y, ImgW * cardinal(UseState) - ImgW, rw.Bottom - rw.Top,
        rw.Right - rw.Left, 0, ImgW * cardinal(UseState) - ImgW, ImgH, 2,
        nil, False, nil);
    end;

    ReleaseDC(SrcHandle, hDC);
    GdipDeleteGraphics(Graphics);

end;
Delphi-Quellcode:
procedure TSkinImageButton.SetBlinkOn(const Value: boolean);
begin
  if Value <> FBlinkOn then
  begin
    FBlinkOn := Value;
    if Assigned(FOnOff) then
      FOnOff(Self, FBlinkOn);
  end;

  InvalidateRect(SrcHandle, @rc, False);
  UpdateWindow(SrcHandle);

end;


Man gibt jetzt von außen einfach nur noch das Handle des gerade aktiven Control an
und die Zeit in der der Timer aktiv sein soll.

Delphi-Quellcode:
    if (EventNo >= $80) and (EventNo <= $E0) then
      fbtnBlinkLight[ChannelNo].ButtonBlink(fbtnBlinkLight[ChannelNo].Handle, 25);


gruss

Geändert von EWeiss ( 2. Jul 2012 um 22:48 Uhr)
  Mit Zitat antworten Zitat
 


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 05:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz