ich habe eine kleine Routine erstellt mit dem man ein Label transparent machen kann.
HTML:
Sub App_Start
Form1.Show
SetTransparent("label1","Form1")
SetTransparent("label2","Form1")
End Sub
Sub SetTransparent(LabelName, frmName)
Control(LabelName).visible = False
x=Control(LabelName).left
y=Control(LabelName).top
w=Control(LabelName).Width
h=Control(LabelName).Height
str=Control(LabelName).Text
fs=Control(LabelName).FontSize
fc=Control(LabelName).FontColor
Control(frmName).DrawString(str,fs,x,y,x+w,y+h,fc)
End Sub
Ich habe auch Labels durch DrawString ersetzt, aber komplett.
Ich mache es etwas anders als Du. Ich benütze FErase und FDrawString das ermöglicht den Text zu löschen und durch einen Neuen zu ersetzten was in Deiner Routine leider nicht der Fall ist.
Ich habe Deine exe's getestet. Verstehe aber auch nicht wieso es mit Visual Studio funktioniert und nicht mit B4PPC.
Du solltest das Problem mal Erel schicken.
Wie hast Du das eigentlich in Visual Studio gemacht ?
Ich habe in der MS Dokumentation nach geschaut, aber keinen Transparenz Parameter gefunden. Habe nur in Protected Properties einen RenderTransparent Parameter gesehen der aber, nach MS, auf den PPC's nicht vorgesehen ist !? Label Properties (System.Windows.Forms)
Hier ist agraham's Antwort:
I haven't rigorously analysed this but from looking inside the fgControls library with Reflector he seems to be trying to draw on the forms background directly. Unfortunately a Basic4ppc Form also draws its backlayer and then its forelayer on the form background so I suspect that it is overwriting his drawing. Tell him to look in CEnhancedForm.cs in the Tzor folder to see what a Basic4ppc Form does on paint.
Ich habe das Problem nicht bis ganz in die Tiefe angeschaut, aber ich habe mir die fgControls Bibliothek mit Reflector angesehen und es scheint dass er (Du) versucht direkt auf den Hintergrund zu zeichnen. Unglücklicherweise zeichnet eine Basic4PPC Form auch ihren Hintergrund und nacher den Forelayer auf diesen Hintergrund, und Ich (agraham) vermute dass dies seine Zeichnung überschreibt. Sage Ihm, er soll in CEnhancedForm.cs im Tzor Ordner nachschauen was eine Basic4PPC Form unter Paint macht.
Wenn man zwei Sprachen spricht ist nicht so schwer besser als Google zu sein. Ich bin sicher dass Du zwischen Deutsch und Italienisch auch weit besser als Google bist.
Aber trotzdem wenn man eine Sprache nicht kennt, kann Google nützlich sein. Aber oft braucht man doch etwas Fantasie um versuchen zu verstehen was der Autor eigentlich sagen wollte. Die Übersetzer haben noch schöne Tage vor sich.
Ab und zu benütze Ich Google um Posts aus mir fremdsprachigen Forums zu übersetzen, manchmal gebe Ich auf, denn es ist unverständlich. Aber Alles in Allem ist es nicht so übel.
Wenn man den Text auf den Forelayer zeichnet, kann man wie schon beschrieben den Text gezielt löschen und neu zeuchnen.
Der Nachteil ist leider dass im VGA Modus die Texte verschwommen angezeigt werden.
Mit digitaldon37 hatten wir das Problem in dem Weather Programm. http://www.b4x.com/forum/open-source-projects/3323-pocket-weather.html#post20228
Die Endlösung ist, wie Filippo es vorgeschlagen hatte, direkt auf den Hintergrund zu zeichnen. Aber diesmal mit dem Nachteil dass, wenn man einen neuen Text schreiben will, zuerst das Hintergrundbild neu geladen und die ganze Seite neu geschrieben werden muss.
Echte Controls mit Transparenz währen eben die beste Lösung, gibt es aber leider nicht, deshalb 'Notlösungen'.
Nach Tage lange suche und viele Test's ist mein Label mit Transparenz fertig.
Der Ablauf ist ganz einfach. In der DLL wird der originale Label unsichtbar gemacht und den Textinhalt wird in ein PictureBox angezeigt, in dem zuvor den Grafikbereich kopiert wurde.
Ich habe einen kleinen Schönheitsfehler gefunden.
Ich habe in Dein Beispielprogramm einen Button hinzugefügt um den Text von der TextBox auf das Label zu übertragen, denn mit KeyPress wird der letzte Buchstabe nicht übertragen (man könnte es mit der Door Library machen).
Mit 6 und 7 Buchstaben, und Center, wird der letze Buchstabe in die nächste Zeile gezeichnet. Mit 8 Buchstaben ist es wieder normal !?
Mit Right wird der letzte Buchstabe nicht oder nur teilweise angezeigt.
Mit 6 und 7 Buchstaben, und Center, wird der letze Buchstabe in die nächste Zeile gezeichnet. Mit 8 Buchstaben ist es wieder normal !?
Mit Right wird der letzte Buchstabe nicht oder nur teilweise angezeigt.