Wenn dies Ihr erster Besuch hier ist,
lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen
durch. Sie müssen sich vermutlich registrieren,
bevor Sie Beiträge verfassen können. Klicken Sie oben auf 'Registrieren', um den Registrierungsprozess zu
starten. Sie können auch jetzt schon Beiträge lesen. Suchen Sie sich einfach das Forum aus, das Sie am meisten
interessiert.
es gibt verschiede Tools (Komponenten) die
Dein Problem löschen, wenn Du mir Dein
E-Mail-Adresse zukommen läßt kann ich die
was zusenden! [email protected]
Hallo Markus,<p>
schau mal bei http://www.torry.net/effects.htm nach. Da gibt es einige Glass-Komponenten für Formulare. Die sind teilweise sogar Freeware mit Source. Eine war auch dabei, die sogar unter anderen BS als Win2k funktionierte. Allerdings ruckelte es dann stark, da diese Effekte sozusagen von Hand berechnet wurden. Allerdings dürfte das für Deinen Anwendungsfall nicht stören.<p>
Grüße, Mario Noac
falls Du schon Windows 2000 einsetzt, stehen die neuen <b>Layered Windows</b> zur Verfügung. Jedes Programmfenster (auch ein bereits compiliertes) kann nachträglich von 0..100 % durchscheinend eingestellt werden, so dass man den Inhalt des darunterliegenden Fensters sieht. Da diese Funktion nun fest im Win32-API und somit im GDI-Teil integriert ist, wird nur wenig zusätzliche Rechenleistung benötigt (Windows 2000 nutzt den gleichen Effekt für das Einblenden der Dialoge), so dass ruckelnde Effekte der Vergangenheit angehören.


Hallo Markus,<p>
Du hast die Funktionen nur unter Win2k zur Verfügung, d.h. Du hast unter anderen Systemen den Effekt einfach nicht, daß heißt das Formular bleibt voll sichtbar. Willst Du das haben, mußt Du den Hintergrund selbst in Dein Form reinrechnen. Das kostet natürlich Rechenkraft ohne Ende und dauert auf langsamen Rechnern schon merklich. Zudem wird das noch recht schwierig zu programmieren. Aber auch dafür gibt es schon Komponenten. Den Link hab ich Dir ja oben schon genannt.<p>
Grüße, Mario Noac
dazu sind nur wenige Aufrufe notwendig. Angenommen, der gestartete Taschenrechner (Windows-Zugehör) soll durchscheinend dargestellt werden. Das könnte so aussehen:
<pre>
uses ShellAPI;
procedure TForm1.Button1Click(Sender: TObject);
var
hTarget : HWND;
dwStyle : DWORD;
bAlpha : Byte;
begin
// Transparenz 70 %
bAlpha := (255 * 70) div 100;
//
ShellExecute(0,nil, 'calc.exe',nil,nil,SW_NORMAL);
Sleep(500);
hTarget := FindWindow(nil, 'Rechner');
if hTarget = 0 then
Abort;
dwStyle := GetWindowLong(hTarget, GWL_EXSTYLE);
SetWindowLong(hTarget, GWL_EXSTYLE, dwStyle or WS_EX_LAYERED);
SetLayeredWindowAttributes(hTarget, RGB(0,0,0), bAlpha, LWA_ALPHA);
end;
</pre>
Wenn nur das eigene Formular durchscheinend dargestellt werden soll, könnte man folgendes machen (eine Checkbox legt dabei das Aussehen fest). Über die TForm-Eigenschaft <b>Handle</b> steht das Fensterhandle abrufbereit zur Verfügung:
<pre>
procedure TForm1.CheckBox1Click(Sender: TObject);
var
dwStyle : DWORD;
bValue : Byte;
begin
if CheckBox1.Checked then
begin
bValue := UpDownMin.Position;
dwStyle := GetWindowLong(Handle, GWL_EXSTYLE);
SetWindowLong(Handle, GWL_EXSTYLE, dwStyle or WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle, RGB(0,0,0), bValue, LWA_ALPHA);
end
else
begin
dwStyle := GetWindowLong(Handle, GWL_EXSTYLE);
SetWindowLong(Handle, GWL_EXSTYLE, dwStyle and (not WS_EX_LAYERED));
end;
end;
</pre>
Hiho ...
in dem Zusammenhang fällt mir ein Kapitel in dem Buch Win32 - Lösungen von Hr. Kosch ein. Dort wird beschrieben, wie man ein Fenster ausstanzen kann. Die Vorlage hierfür ist eine Canvas. Wenn man nun hinter jeden Button oder was auch immer ein gefülltes Rechteck malt und die Form dann ausstanzen läßt, dann sollte das doch den gewünschten Effekt haben, oder nicht ??? Ich weiß nicht ob ich das nun alles richtig verstanden habe und ich weiß auch nicht wie die Performance bei dieser Methode ist, weil ich das selber noch nie gemacht habe. Bei bedarf kann ich das ja mal posten, ist nicht sehr viel, oder einfach per E-Mail melden: [email protected]
Comment