![]() |
An Property zwei werte übergeben
Oh man bekomm es wieder nicht auf die Reihe!
Delphi-Quellcode:
property BlinkOn: boolean read FBlinkOn write SetBlinkOn default false;
Möchte an BlinkOn noch ein Handle übergeben aber dennoch den Boolean wert erhalten. Wie gehts ? :) Der meckert mir immer was von wegen nicht in der Basis Classe. so sollte es übergeben werden
Delphi-Quellcode:
SetBlinkOn(Winhandle, false);
gruss |
AW: property ärger
Über den klassischen Setter wirst Du das nicht realisieren können. Nutze Deine Methode "SetBlinkOn" mit den beiden Parametern als reguläre Prozedur.
|
AW: property ärger
Zitat:
Habe mir schon sowas gedacht das es nur über ne procedure oder mit Rückgabe function geht. gruss |
AW: property ärger
Irgendwie versteh ich nicht wie du 2 "Werte" in einer Property halten willst. Was mir dazu einfällt wäre:
Delphi-Quellcode:
- TBlinkOn erzeugen und im Create die Defaultwerte setzen.
TBlinkOn = class
private FHandle: Cardinal; FBlink: Boolean; public constructor Create; property Handle: Cardinal read FHandle write FHandle; property Blink: Boolean read FBlink write FBlink; end; . . . property BlinkOn: TBlinkOn read FBlinkOn write SetBlinkOn; entweder BlinkOn.Handle:= 0815; BlinkOn.Blink:= True; oder eine Prozedur der du die Werte übergibst und diese die Property beschreibt. Hoffe dich richtig verstanden zu haben... 8-) |
AW: An Property zwei werte übergeben
Zitat:
Meine Gedanke scheint aber nicht umsetzbar zu sein ohne eine procedure anstelle von property zu verwenden. gruss |
AW: An Property zwei werte übergeben
Du könntest eine Record als Property verwenden, im OI kannst Du halt nicht viel damit anfangen.
|
AW: An Property zwei werte übergeben
Es kommt drauf an, was genau du willst.
Aber eigentlich willst du ja eine Settermethode haben, womit das
Delphi-Quellcode:
also schonmal die Lösung war.
SetBlinkOn(Winhandle, false);
Soll man die gesetzen Werte auch wieder auslesen können? Nja, die andere Möglichkeit wäre eventuell ein Array-Property. (auch wenn ich immernoch denke, du willst die SetterMethode :angle2: ) Kennt man z.B. von der TStringList.
Delphi-Quellcode:
Aber da ein Property über
procedure SetBlinkOn(WinHandle: HWND; Active: Boolean);
function GetBlinkOn(WinHandle: HWND): Boolean; property BlinkOnRW[WinHandle: HWND]: Boolean read GetBlinkOn write SetBlinkOn; property BlinkOn[WinHandle: HWND]: Boolean write SetBlinkOn; xxx.BlinkOn[Handle] := True;
Delphi-Quellcode:
zugewiesen wird, kann es natürlich immer nur einen Wert gleichzeitig entgegennehmen und zurückgeben. (zusätzliche Array-Parameter nicht eingeschlossen)
:=
[EDIT] Da es keinen Standardeditor für Record-Property gibt, kann man im OI mit Records garnichts anfangen. Es sei denn man bastelt sich selbst einen passenden Property-Editor. |
AW: An Property zwei werte übergeben
Delphi-Quellcode:
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 |
AW: An Property zwei werte übergeben
Zitat:
|
AW: An Property zwei werte übergeben
Zitat:
fbtnBlinkLight ist ein Control "ISkinImageButton" das über CreateWindowEx erstellt wurde Jedes hat also seine eigenen propertys Das Control mit all seinen eigenschaften wird in eine Liste gespeichert. Um mir ein leidiges hin und her mit arrays zu ersparen übergebe ich einfach das eigenen Handle mit. Das ist nur interessant für die DLL schließlich muss hier das Control auch identifizierbar sein. Es ist also eine frage des Aufwands! Ein über CreateWindowEx erstelltes Window benötigt eine eindeutige Identifizierungs Nummer Was ist jetzt einfacher Das..
Delphi-Quellcode:
fbtnBlinkLight[ChannelNo].ButtonBlink(fbtnBlinkLight[ChannelNo].Handle, 25);
oder das..
Delphi-Quellcode:
fbtnBlinkLight[ChannelNo].ButtonBlink(SKAERO_GetMainItem(MainHandle, ID_BLINKLIGHT_FIRST), 25);
MainHandle ist das ParentWIndow auf dem sich das Control befindet Zurück geliefert wird das Handle von fbtnBlinkLight also fbtnBlinkLight[ChannelNo].Handle GetMainItem identifiziert das Handle über die angegebene ID mit GetDlgItem(hOwner, UseID) Und das spare ich mir einfach in dem ich das eigene Handle mit übergebe. Übergeben werden muss es so oder so. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:20 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