Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Transparente Form1 / Image Problem!
alexschultze - Mo 28.10.02 17:31
Titel: Transparente Form1 / Image Problem!
hi!
ich hab noch ein Problem:
ich habe eine unsichtbare Form und darauf liegt eine Grafik.
Die Grafik ist selber noch auf 'transparent' geschaltet, so dass die schwarzen Randflächen wegfallen und das ganze somit einen 'Design'-Charakter erhält ;)
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.FormCreate(Sender: TObject); begin Form1.Brush.Style:=bsClear; Form1.BorderStyle:=bsNone; end;
procedure TForm1.SpeedButton1Click(Sender: TObject); begin Application.Terminate; end; |
So, folgendes Problem:
Wenn irgendwas hinter dem Fenster erscheint, im Bereich der transparenten Grafik, so bleibt dies im 'Puffer' der Grafik, und es bleibt erhalten, selbst wenn ein neues Fenster kommt.
Ich vermute dass der transparente Teil des Images normalerweise eine Form hinter sich erwartet, und dass ganze somit ignoriert, und da keine Forum da ist, wird alles gebuffert.
Was soll ich tun?
Alex
Udontknow - Mo 28.10.02 18:07
Hi!
Hast du das Bild einfach mal mit "repaint" neu zeichnen lassen?
Was passiert, wenn du das Bild überschreibst, was, wenn du die Eigenschaft "transparent" aus und wieder einschaltest?
Cu,
Udontknow
alexschultze - Mo 28.10.02 21:45
also, ich hatte diverse Funktionen probiert wie doublebuffered der Form, und 'update' des Images.
Moment, ich probiere mal:
Refresh und Repaint bringen nix. Der scheint nur die benutzen Bildpunkte (alswie die Grafik) zu aktualisieren.
Nummero zwo:
Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.SpeedButton1Click(Sender: TObject); begin Form1.Brush.Style:=bsSolid; Form1.Brush.Style:=bsClear; end; |
funktioniert nicht.
Entweder nicht genug Zeit zum repainten, oder bsSolid stimmt nicht (ich kenne den Urzustand nicht).
Aber das würde in real dann bestimmt flimmern. Ich hab ne neue Idee, moment!
Mist, die AlphaBlendValue der Form auf 1 stellen bringt es nicht, da ist der Rest auch unsichtbar ... :(
sonst noch Ideen?
alexschultze - Mo 28.10.02 22:12
okay, damit jeder der im Forum stöbert auf die bzw. meine Lösung kommt, um ihm/ihr damit zu helfen:
Man muss die Form kurz ausschalten (form1.visible:=false) und kurz danach wieder einschalten.
Geht prima, wenn man das aber auf nen Knopf legt, also die beiden Befehle direkt hintereinander gibts ein Problem ;)
EInfache Lösung: Zeitliche Versetzung. Ein Timer wird dann Gleich von Knopf aufgerufen, der nach der eingestellen zeitlichen Verzögerung das ganze also wieder anzeigt (und sich danach selber wieder abschaltet!)
Der Timer sollte einen Wert haben, dass jeder PC eine CHance hat die Form auszuschalten und neu zu zeichnen.
(ich erinner mich an meinen 386, wo ne stinknormale Form unter 95 bis zu 5 Sekunden braucht *g*)
Das ganze also wie folgt:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TForm1.FormCreate(Sender: TObject); begin Form1.Brush.Style:=bsClear; Form1.BorderStyle:=bsNone;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject); begin
form1.Visible:=false; timer1.Enabled:=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject); begin
form1.Visible:=true; timer1.Enabled:=false; end; |
Ach so, am besten ersetzt ihr den Knopf durch den Trigger der aufgerufen wird, wenn die Anwendung neu gezeichnet (onPaint macht sich schlecht muss ich gerade feststellen *g* )bzw. aktiviert wird.
Wenn die ANwendung kurz nicht mehr die Hauptanwendung war (anderes Programm / irgendein Ordner) und danach wieder aufgerufen wird. Dann sieht es meist so verzogen aus.
Für alle kommenden Delphi-Generationen ;)
Greeny
Anonymous - Mo 28.10.02 22:23
Wieso machst du nicht eine Formular Sonderform. So wie ich das verstanden habe willst du ein Design-Formular haben. Oder? Mit transparenten Formularen und Grafiken ist das ganze nur ein ... Naja, etwas richtiges wirde es nicht.
Hier ein Tool mit dem du eine Region-Unit erstellen kannst die anhand einer Grafik erstellt worden ist. Ist also ein richtiges Designfenster.
http://www.informatics.no/progvareOF.htm
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!