Toon posts:

[Kylix] Text tonen op transparante image ==> Bug?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een image op een form staan met daarin een plaatje.

Op deze image toon ik een andere image die ik instel op transparent. In deze 2e image wil ik tekst tekenen op de canvas.

Delphi:
1
2
3
4
5
  with img_Vraag.Canvas do
  begin
    Brush.Style := bsClear;
    TextOut(0, 0, 'Bla bla');
  end;


Het probleem dat zich nu voor doet is dat de background van de image een witte kleur krijgt. Dit zou niet mogen omdat de image ingesteld staat op transparent.

Is dit een bug in Kylix?

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

:? Over welke image heb je het nou? En post aub alle code voor die images. Dat kan nooit veel zijn

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
LordLarry schreef op 25 maart 2003 @ 15:56:
:? Over welke image heb je het nou? En post aub alle code voor die images. Dat kan nooit veel zijn
Het is gewoon de standaard TImage die aanwezig is in kylix.

De 1e image bevat dus een plaatje. Voor de rest is er hier geen code voor nodig.

De 2e image (dus ook een TImage) wordt gebruikt om tekst te kunnen weergeven. Er zit hier dus geen plaatje in.

Deze image staat ingesteld op transparant.

Ik wil hier in tekst tonen. (Ja dat klinkt misschien raar, maar met een TImage kan je heel het canvas "stretchen", waardoor je dus een lettertype krijgt met een andere verhouding dan normaal. Dat is precies wat wij nodig hebben. Aangezien het standaard Label component dit niet kan en ik kon ook geen andere Label componenten vinden. Dus dit leek mij wel een goede oplossing).

Het probleem is dat zodra je tekst gaat tekenen, de computer ook de achtergrond invult.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:27

Creepy

Tactical Espionage Splatterer

Je image maakt zichzelf nu wel transparent, maar daar weet het canvas helemaal niks vanaf, dus hier teken je weer doodleuk text op met de achtergrond van het canvas.

In windows heb ik dit opgelost door gebruik te maken van SetBKMode(), maar ik geloof niet dat deze functie in Kylix beschikbaar is aangezien dit een Windows API call is.

In de help van Borland staat nog dit:
Description

The Style property determines the pattern painted by the brush, unless a value is assigned to Bitmap. The possible values of Style are
En aangezien je een Exception krijgt als je een teken functie van het canvas aanroept en deze geen bitmap bevat...

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Creepy schreef op 26 March 2003 @ 08:22:En aangezien je een Exception krijgt als je een teken functie van het canvas aanroept en deze geen bitmap bevat...
Mijn Image bevat ook geen plaatje, maar ik kan er gewoon op tekenen.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:27

Creepy

Tactical Espionage Splatterer

Dat kan goed kloppen aangezien een canvas standaard een bitmap aanmaakt ;)
wat dus ook meteen betekent dat er GEEN gebruik wordt gemaakt van de brush. Dus je brush op bsClear instellen heeft dan geen invloed bij het tekenen op het canvas aangezien dan de canvas.bitmap als achtergrond gebruikt (die witte achtergrond die jij dus krijgt)

[ Voor 65% gewijzigd door Creepy op 26-03-2003 12:56 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Kortom het is dus onmogelijk om op een Image waar geen plaatje inzit, tekst te tekenen die transparant is.

  • WildernessChild
  • Registratie: Februari 2002
  • Niet online

WildernessChild

Voor al uw hersenspinsels

Als Kylix een beetje op Delphi lijkt is een TPaintBox denk ik wat je nodig hebt. Gewoon tekenen zonder overhead van een TImage. Of die transparantie goed gaat weet ik zo niet.

Maker van Taekwindow; verplaats en resize je vensters met de Alt-toets!


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:27

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op 26 March 2003 @ 14:35:
Kortom het is dus onmogelijk om op een Image waar geen plaatje inzit, tekst te tekenen die transparant is.
Onder windows heb ik het opgelost d.m.v. een windows API call. En er zal vast wel een oplossing voor Kylix ergens zijn, ik weet die in ieder geval niet want alles wat ik met graphics e.d. in Delphi heb gedaan was allemaal onder windows.

Is het niet mogelijk om rechtstreeks op je bestaande afbeelding tekst te zetten en zo mee te laten strechten of moet het strechten van de text onafhankelijk van de afbeelding gebeuren?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Creepy schreef op 26 March 2003 @ 15:25:Is het niet mogelijk om rechtstreeks op je bestaande afbeelding tekst te zetten en zo mee te laten strechten of moet het strechten van de text onafhankelijk van de afbeelding gebeuren?
De Image's die ik gebruik zijn alleen maar om tekst weer te kunnen geven. Dus eigenlijk als vervanger voor een TLabel.

Ik heb dit zo gedaan, omdat de TImage de mogelijkheid biedt om te kunnen stretchen waardoor je dus een andere verhouding krijgt.

Die andere verhouding is echt noodzakelijk. Bij een normale Label kan ik niet de verhouding aangeven.

  • WildernessChild
  • Registratie: Februari 2002
  • Niet online

WildernessChild

Voor al uw hersenspinsels

Maak gewoon een nieuw component TStretchLabel ofzo, en override z'n Paint methode.

Maker van Taekwindow; verplaats en resize je vensters met de Alt-toets!


Verwijderd

Topicstarter
WildernessChild schreef op 27 maart 2003 @ 11:12:
Maak gewoon een nieuw component TStretchLabel ofzo, en override z'n Paint methode.
Het label component heeft geen aparte paint procedure die ik kan overriden. Dus dit is helaas geen optie.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:27

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op 31 March 2003 @ 22:01:
[...]
Het label component heeft geen aparte paint procedure die ik kan overriden. Dus dit is helaas geen optie.
Tlabel is een sub klasse van TCustomLabel. En TCustomLabel heeft wel een paint method, dus TLabel ook.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Creepy schreef op 01 april 2003 @ 08:14:Tlabel is een sub klasse van TCustomLabel. En TCustomLabel heeft wel een paint method, dus TLabel ook.
Bij de VCL heb je inderdaad een paint procedure, maar bij CLX niet. (of ik ben blind) :) )

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:27

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op 01 April 2003 @ 16:55:
[...]
Bij de VCL heb je inderdaad een paint procedure, maar bij CLX niet. (of ik ben blind) :) )
Eeeh.. ik dacht eigenlijk van wel... hmm... eeehh... dat zou ik ff na moeten zoeken

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 15:12

alienfruit

the alien you never expected

Kijk eens op de Companion Cd staat minstens twee voorbeelden hoe je dit moet doen...

Volgens mij was de
code:
1
Canvas.CopyMode
de truc; alleen heb ik hier geen Kylix meer draaien omdat er niet mee valt te werken; veelste buggy.

[ Voor 48% gewijzigd door alienfruit op 02-04-2003 10:43 ]


Verwijderd

Topicstarter
alienfruit schreef op 02 April 2003 @ 10:31:Kijk eens op de Companion Cd staat minstens twee voorbeelden hoe je dit moet doen...

Volgens mij was de
code:
1
Canvas.CopyMode
de truc; alleen heb ik hier geen Kylix meer draaien omdat er niet mee valt te werken; veelste buggy.
Waar staat dat dan op companion cd?
Pagina: 1