Autor Beitrag
alexschultze
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 317



BeitragVerfasst: Mo 28.10.02 17:31 
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 ;)

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 317



BeitragVerfasst: 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 317



BeitragVerfasst: 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:
ausblenden 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
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: 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.


www.informatics.no/progvareOF.htm