Autor |
Beitrag |
KainPlan
Beiträge: 27
Vista Buisness, Windows 7
C/C++, C#, PHP...
|
Verfasst: Di 24.02.09 03:23
Hallo,
ich hab hier mal ne kleine Klasse geschrieben die die Entfernung zwischen Maus und Formrand misst und diese Entfernung in eine Tranzparenz umsetzt. Natürlich ist es möglich die maximale/minimale Tranzparenz festzulegen. Keine Ahnung wozu ihr das brauchen könnt aber ich hab da so meine teuflischen Ideen . HF
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200:
| public class SensitivOpacityExtension : IDisposable { #region "-- public Propertys --" private int opacityTouchRadius = 300; public int OpacityTouchRadius { get { return opacityTouchRadius; } set { opacityTouchRadius = value; recalculate(); } }
private double opacityMin = 0.25; public double OpacityMin { get { return opacityMin; } set { opacityMin = value; recalculate(); } }
private double opacityMax = 1; public double OpacityMax { get { return opacityMax; } set { opacityMax = value; recalculate(); } }
private bool active = false; public bool Active { get { return active; } set { active = value; } }
private Form form; public Form Form { get { return form; } set { form = value; } } #endregion
#region "-- private Members --" private double opacityStep = -1; private static Timer tMouseCapture = null; #endregion
#region "-- public Functions & Constructor --" public SensitivOpacityExtension(Form form) { this.form = form; recalculate();
if (tMouseCapture == null) { tMouseCapture = new Timer(); tMouseCapture.Interval = 10; tMouseCapture.Enabled = true; }
tMouseCapture.Tick += new EventHandler(tMouseCapture_Tick); }
public void Start() { active = true; }
public void Stop() { active = false; form.Opacity = opacityMax; } #endregion
#region "-- private Functions --" private void tMouseCapture_Tick(object sender, EventArgs e) { if (!active) return; if (form == null) return;
Point mpos = Cursor.Position;
if (form.Bounds.Contains(mpos)) { form.Opacity = opacityMax; } else { Rectangle fr = form.Bounds;
double dist = 0; int a, b;
if (fr.Top > mpos.Y && fr.Left > mpos.X) { a = fr.Left - mpos.X; b = fr.Top - mpos.Y; dist = Math.Sqrt(a * a + b * b); } else if (fr.Top > mpos.Y && fr.Right < mpos.X) { a = fr.Right - mpos.X; b = fr.Top - mpos.Y; dist = Math.Sqrt(a * a + b * b); } else if (fr.Bottom < mpos.Y && fr.Right < mpos.X) { a = fr.Bottom - mpos.Y; b = fr.Right - mpos.X; dist = Math.Sqrt(a * a + b * b); } else if (fr.Bottom < mpos.Y && fr.Left > mpos.X) { a = fr.Bottom - mpos.Y; b = fr.Left - mpos.X; dist = Math.Sqrt(a * a + b * b); }
else if (fr.Top > mpos.Y) { dist = fr.Top - mpos.Y; } else if (fr.Right < mpos.X) { dist = mpos.X - fr.Right; } else if (fr.Bottom < mpos.Y) { dist = mpos.Y - fr.Bottom; } else if (fr.Left > mpos.X) { dist = fr.Left - mpos.X; }
if (dist > opacityTouchRadius) form.Opacity = opacityMin; else { form.Opacity = opacityMax - opacityStep * dist; } }
}
private void recalculate() { double mval = opacityMax - opacityMin; opacityStep = (mval / (double)opacityTouchRadius); } #endregion
#region IDisposable Member public void Dispose() { if (tMouseCapture != null) tMouseCapture.Tick -= tMouseCapture_Tick; } #endregion } |
|
|
Greenberet
Beiträge: 339
Erhaltene Danke: 20
Win 10
C# (VS 2012), C++ (VS 2012/GCC), PAWN(Notepad++), Java(NetBeans)
|
Verfasst: Di 24.02.09 10:49
Klingt ja nach einer netten Idee. Auch wenn der einzige Anwendungszweck der mir momentan einfallen würde wäre "Wie ärgere ich denn Heute den User" ^^
Mir ist beim durchlesen von deinem Source ein möglicher Bug aufgefallen.
Wenn die Form jetzt fast ganz Transparent ist und man eine neue Form über das Property setzt, dann bleibt die Transparent.
|
|
KainPlan
Beiträge: 27
Vista Buisness, Windows 7
C/C++, C#, PHP...
|
Verfasst: Di 24.02.09 16:12
Ach komm user ärgern wollen wir alle mal, ganz besonders den DAU. Jetzt mal im ernst die Form als Steuerelement und die Tranzparenz sind ja nur ein beispiel, wie man soch code verwenden kann. Bei selbst gezeichneten Buttons z.B. sieht das hervorragend aus wenn man statt Transparenz Farbe ins spiel bringt.
|
|
elundril
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Di 24.02.09 18:06
ich hab mir die klasse zwar nicht durchgelesen, was ich jedoch von der ersten antwort rausgelesen hab ist, dass das Fenster verschwindet je näher man mit der Maus kommt. Das ganze könnte man ja auch umkehren. Es wird sichtbar je näher man mit der Maus kommt. Wäre sicher nützlich für Tools wie nen Kalender, den man nicht unbedingt sichtbar haben will aber doch im vordergrund um immer auf ihn zugreifen zu können.
lg
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
KainPlan
Beiträge: 27
Vista Buisness, Windows 7
C/C++, C#, PHP...
|
Verfasst: Di 24.02.09 22:50
elundril hat folgendes geschrieben : | ich hab mir die klasse zwar nicht durchgelesen, was ich jedoch von der ersten antwort rausgelesen hab ist, dass das Fenster verschwindet je näher man mit der Maus kommt. Das ganze könnte man ja auch umkehren. Es wird sichtbar je näher man mit der Maus kommt. Wäre sicher nützlich für Tools wie nen Kalender, den man nicht unbedingt sichtbar haben will aber doch im vordergrund um immer auf ihn zugreifen zu können.
lg |
*hust*
also was du da beschreibst ist die funktionsweise der Klasse. Was macht das für einen sinn die Form bei Annäherung unsichtbar zu machen? Hab ich das vielleicht ungeschickt beschrieben??
|
|
Greenberet
Beiträge: 339
Erhaltene Danke: 20
Win 10
C# (VS 2012), C++ (VS 2012/GCC), PAWN(Notepad++), Java(NetBeans)
|
Verfasst: Mi 25.02.09 00:33
|
|
KainPlan
Beiträge: 27
Vista Buisness, Windows 7
C/C++, C#, PHP...
|
Verfasst: Mi 25.02.09 22:31
achso Okay dann haben wir jetzt alle mal aneinander vorbei geredet ;D, passiert.
|
|