Como gravar TFontStyles em um arquivo
Boa tarde.
Será que alguem sabe como gravar [dsBold, dsItalic, dsUnderline] em um DB?
Obrigado
Adilson
Será que alguem sabe como gravar [dsBold, dsItalic, dsUnderline] em um DB?
Obrigado
Adilson
Pecchiai
Curtidas 0
Respostas
Edilcimar
07/12/2005
use um richedit e depois coloque em um campo blob
GOSTEI 0
Pecchiai
07/12/2005
use um richedit e depois coloque em um campo blob
Edilcimar estou usando FontDialog do VCL SKIN.
Grato
Adilson
GOSTEI 0
Edilcimar
07/12/2005
não entendi o que vc quer salvar então! não é um texto formatado?
GOSTEI 0
Pecchiai
07/12/2005
não entendi o que vc quer salvar então! não é um texto formatado?
Não, quero salvar as configurações do fontdialog para usar mais tarde.
nome da fonte
tamanho
cor e
estilo
não estou conseguindo salvar o estilo.
GOSTEI 0
Edilcimar
07/12/2005
ok então pegue um bd e crie os campos nomedafonte, tamanhodafonte, sublinhado, italico e negrito, e grave as configurações tipo
nomedafonte -> arial
tamanhodafonte -> 10
sublinhado -> false
italico -> true
negrito -> false
nomedafonte -> arial
tamanhodafonte -> 10
sublinhado -> false
italico -> true
negrito -> false
GOSTEI 0
Pecchiai
07/12/2005
ok então pegue um bd e crie os campos nomedafonte, tamanhodafonte, sublinhado, italico e negrito, e grave as configurações tipo
nomedafonte -> arial
tamanhodafonte -> 10
sublinhado -> false
italico -> true
negrito -> false
Fiz isso, mas o problema é que o codigo ficou confuso com muitas condições.
tipo
so negrito
negrito e italico
so italico
negrito e sublinhado
e assim por diante.
sera que não tem uma maneira de criar um campo e gravar o estilo escolhico no campo: exemplo = [fsBold, fsItalic]
agradeço a atenção
GOSTEI 0
Edilcimar
07/12/2005
poder pode, nada impede
GOSTEI 0
Eniorm
07/12/2005
[quote:399e5f9b79=´Adilson Pecchiai´]sera que não tem uma maneira de criar um campo e gravar o estilo escolhico no campo: exemplo = [fsBold, fsItalic]
[/quote:399e5f9b79]
o que o camagada quer é gravar o valor da propriedade, pois se tentar gravar como texto fica phoda pra ele passar o valor que esta do db para o componente... tipo
Font.Style := [Query.FieldByName(´...´).As???];
correto?
seria o mesmo que gravar no db o nome de um procedure ou function, e depois tentar executar essa procedure/function baseado no texto com o nome que foi gravado no db....
abraço,
[/quote:399e5f9b79]
o que o camagada quer é gravar o valor da propriedade, pois se tentar gravar como texto fica phoda pra ele passar o valor que esta do db para o componente... tipo
Font.Style := [Query.FieldByName(´...´).As???];
correto?
seria o mesmo que gravar no db o nome de um procedure ou function, e depois tentar executar essa procedure/function baseado no texto com o nome que foi gravado no db....
abraço,
GOSTEI 0
Pecchiai
07/12/2005
Bom Enio, isso quer dizer que vou ter que ficar com esse codigo confuso mesmo?
obrigado pela atenção
Adilson
obrigado pela atenção
Adilson
GOSTEI 0
Pecchiai
07/12/2005
Oi pessoal.
Consegui resolver meu problema usando ponteiro.
E passo o exemplo para quem possa interessar.
É so transformar o Style em inteiro.
Fonte := FontDialog.Font.Style;
P := @Fonte;
showmessage(Format(´¬d´, [P^]));
Obrigado pela ajuda
Adilson
Consegui resolver meu problema usando ponteiro.
E passo o exemplo para quem possa interessar.
É so transformar o Style em inteiro.
Fonte := FontDialog.Font.Style;
P := @Fonte;
showmessage(Format(´¬d´, [P^]));
Obrigado pela ajuda
Adilson
GOSTEI 0
Adriano Santos
07/12/2005
[quote:35c80a7532=´Adilson Pecchiai´]Oi pessoal.
Consegui resolver meu problema usando ponteiro.
E passo o exemplo para quem possa interessar.
É so transformar o Style em inteiro.
Fonte := FontDialog.Font.Style;
P := @Fonte;
showmessage(Format(´¬d´, [P^]));
Obrigado pela ajuda
Adilson[/quote:35c80a7532]
Adilson, só uma dúvida que ficou:
Você está gravando em Inteiro no banco? Funcionou blz entao?
Consegui resolver meu problema usando ponteiro.
E passo o exemplo para quem possa interessar.
É so transformar o Style em inteiro.
Fonte := FontDialog.Font.Style;
P := @Fonte;
showmessage(Format(´¬d´, [P^]));
Obrigado pela ajuda
Adilson[/quote:35c80a7532]
Adilson, só uma dúvida que ficou:
Você está gravando em Inteiro no banco? Funcionou blz entao?
GOSTEI 0
Pecchiai
07/12/2005
Adilson, só uma dúvida que ficou:
Você está gravando em Inteiro no banco? Funcionou blz entao?
Você está gravando em Inteiro no banco? Funcionou blz entao?
é isso ai, grava em inteiro, depois é so ler e transformar novamente.
GOSTEI 0
Vitor Rubio
07/12/2005
e numa outra instância do programa, ou depois que desliga a máquina etc.. continua funcionando? Eu pensava que esses numeros de ponteiros mudavam a cada execução do programa.
GOSTEI 0
Pecchiai
07/12/2005
[quote:2aa5c314ab=´vitor^_^´]e numa outra instância do programa, ou depois que desliga a máquina etc.. continua funcionando? Eu pensava que esses numeros de ponteiros mudavam a cada execução do programa.[/quote:2aa5c314ab]
Vitor eu estou pegando o tipo ou estilo escolhido ex: negrito e italico, e guardo em uma tabela, para configurar o cabeçalho de um relatório que estou fazendo.
Abraço
Adilson
Vitor eu estou pegando o tipo ou estilo escolhido ex: negrito e italico, e guardo em uma tabela, para configurar o cabeçalho de um relatório que estou fazendo.
Abraço
Adilson
GOSTEI 0
Saint
07/12/2005
po, eu nunca trabalhei com ponteiros no delphi e achei interessante o topico mas quando fui tentar refazer aqui nao consegui..
as variaveis criadas no seu caso foram essas:
var
Fonte:TFontStyles;
P:^TFontStyles;
???
falow, abracos
as variaveis criadas no seu caso foram essas:
var
Fonte:TFontStyles;
P:^TFontStyles;
???
falow, abracos
GOSTEI 0
Vitor Rubio
07/12/2005
E o resto do código? Onde exatamente deu erro?
Se você quer armazenar o estilo da fonte, faça como nosso colega Pecchiai.
Já com relação a ponteiros, eles realmente são muito úteis para se fazer ´no dedo´ algumas coisas que as classes e bibliotecas do Delphi fazem por você mas que vc não sabe como são feitas. Dá pra fazer listas encadeadas, pilhas, filas, alocação dinâmica, ponteiros para funções (ou variaveis do tipo função) que vc pode atribuir uma função com a mesma assinatura e executar, arvores binárias entre muuuuuuitas outras aplicações. Eu recomendo você a dar uma olhada em livros de turbo pascal/object pascal para se aprofundar em ponteiros. O uso de ponteiros em qualquer linguagem sempre foi um assunto complexo, e o mau uso deles pode acarretar várias ´zicas´ (não tem outro nome hehe) no seu programa.
Té +
Se você quer armazenar o estilo da fonte, faça como nosso colega Pecchiai.
Já com relação a ponteiros, eles realmente são muito úteis para se fazer ´no dedo´ algumas coisas que as classes e bibliotecas do Delphi fazem por você mas que vc não sabe como são feitas. Dá pra fazer listas encadeadas, pilhas, filas, alocação dinâmica, ponteiros para funções (ou variaveis do tipo função) que vc pode atribuir uma função com a mesma assinatura e executar, arvores binárias entre muuuuuuitas outras aplicações. Eu recomendo você a dar uma olhada em livros de turbo pascal/object pascal para se aprofundar em ponteiros. O uso de ponteiros em qualquer linguagem sempre foi um assunto complexo, e o mau uso deles pode acarretar várias ´zicas´ (não tem outro nome hehe) no seu programa.
Té +
GOSTEI 0
Saint
07/12/2005
entao, em C eu ja usei mto ponteiro, mas em delphi nunca tive a real necessidade e justamente por querer me aprofundar que eu queria ver como foram declaradas as variaveis, o erro da justamente nessa linha:
showmessage(Format(´¬d´, [P^]));
e eu declarei dessa forma:
var
Fonte:TFontStyles;
p:^TFontStyles;
showmessage(Format(´¬d´, [P^]));
e eu declarei dessa forma:
var
Fonte:TFontStyles;
p:^TFontStyles;
GOSTEI 0
Pecchiai
07/12/2005
entao, em C eu ja usei mto ponteiro, mas em delphi nunca tive a real necessidade e justamente por querer me aprofundar que eu queria ver como foram declaradas as variaveis, o erro da justamente nessa linha:
showmessage(Format(´¬d´, [P^]));
e eu declarei dessa forma:
var
Fonte:TFontStyles;
p:^TFontStyles;
Colega mude a variavel (p:^TFontStyles) para (P : PByte).
Abraço
GOSTEI 0
Vitor Rubio
07/12/2005
você achará essa código interessante, porem eu não consegui fazer a maracutaia com TfontStyles, mas consegui fazer com TFontStyle:
qual q eh a diferença?
TfontStyles é um conjunto ou set de TfontStyle, ou seja, tfontstyle pode ser fsbold, e tfontstyles pode ter [fsbold, fsitalic, ...]
Coloque a unit typinfo no seu projeto e veja a ´cricincruma´ que eu fiz:
Ah! do jeito que o colega Pecchiai fez também funciona legal, usando um pbyte que na verdade é um ponteiro para byte :wink:
espero ter ajudado ^^
qual q eh a diferença?
TfontStyles é um conjunto ou set de TfontStyle, ou seja, tfontstyle pode ser fsbold, e tfontstyles pode ter [fsbold, fsitalic, ...]
Coloque a unit typinfo no seu projeto e veja a ´cricincruma´ que eu fiz:
procedure TForm1.btFonteClick(Sender: TObject); var fonte: TFontStyle; p:^TFontStyle; begin p := @fonte; // atribui a p o endereço de fonte showmessage(Format(´¬d´, [integer(p)])); //mostra em decimal o endereço p showmessage(Format(´¬d´, [Integer(p^)])); //mostra em inteiro o valor de p como tipo enumerado. { OBS.: como fsbold é o primeiro item do tipo enumerado fontstyle, integer(p^) quer dizer a mesma coisa que integer(valor do endereço de p) ou a mesma coisa que integer(fonte), que é 0 visto fsbold ser o primeiro estilo do tipo enumerado. Se fosse o segundo seria 1 (fsitalic) } ShowMessage( GetEnumName(TypeInfo(TFontStyle), Integer(fonte))); //mostra em formato string o estilo da fonte, com getenumname(typeinfo) ShowMessage(Format(´¬s´, [GetEnumName(TypeInfo(TFontStyle),Integer(p^))])); { mostra o valor em formato string da fonte contida no endereço p, com p^ da mesma forma que p é o endereço de fonte e P^ é o valor de fonte } { com relação a gravar estilos de fonte e outros tipos enumerados, eh soh gravar a string resultante das funções acima, fsbold... etc e fazer o processo inverso: } fonte := TFontStyle(GetEnumValue(TypeInfo(TFontStyle),´fsItalic´)); lbFonte.Font.Style := lbFonte.Font.Style + [fonte]; //ou lbFonte.Font.Style := [fonte]; para ficar apenas italico end;
Ah! do jeito que o colega Pecchiai fez também funciona legal, usando um pbyte que na verdade é um ponteiro para byte :wink:
espero ter ajudado ^^
GOSTEI 0
Vitor Rubio
07/12/2005
legal é que no esquema do colega Pecchiai dá pra fazer com o fontstyles também, e o valor é simplesmente um integer, que muda conforme os estilos de fontes. Temos os tipos:
fsBold, fsItalic, fsUnderline, fsStrikeOut. Seus valores são, respectivamente fsBold=0, fsItalic=1, fsUnderline=2, fsStrikeOut=3
O valor numérico inteiro do TfontStyles é formado pela soma de cada componente do set multiplicado por 2 elevado ao seu numero de ordem, dessa forma os numeros nunca se repetem, e os valores tambem não. por exemplo
se o Tfontstyle for [fsbold], então o número é 2^0 (2 elevado a zero) = 1
se for [fsbold, fsitalic], então = 2^0 + 2^1 = 1+2 = 3
se for apenas [fsUnderline] então é 2^2 = 4 e se tiver todos os estilos então é:
[fsBold, fsItalic, fsUnderline, fsStrikeOut] = 2^0+2^1+2^2+2^3 = 1+2+4+8 = 15 e assim por diante:
veja o exemplo abaixo:
fsBold, fsItalic, fsUnderline, fsStrikeOut. Seus valores são, respectivamente fsBold=0, fsItalic=1, fsUnderline=2, fsStrikeOut=3
O valor numérico inteiro do TfontStyles é formado pela soma de cada componente do set multiplicado por 2 elevado ao seu numero de ordem, dessa forma os numeros nunca se repetem, e os valores tambem não. por exemplo
se o Tfontstyle for [fsbold], então o número é 2^0 (2 elevado a zero) = 1
se for [fsbold, fsitalic], então = 2^0 + 2^1 = 1+2 = 3
se for apenas [fsUnderline] então é 2^2 = 4 e se tiver todos os estilos então é:
[fsBold, fsItalic, fsUnderline, fsStrikeOut] = 2^0+2^1+2^2+2^3 = 1+2+4+8 = 15 e assim por diante:
veja o exemplo abaixo:
procedure TForm1.Button1Click(Sender: TObject); var pb: PByte; fontes: TFontStyles; begin fontes := fontes + [fsItalic, fsUnderline, fsStrikeOut]; pb := @fontes; showmessage(Format(´¬d´, [Pb^])); //isso vale showmessage(Format(´¬d´, [byte(fontes)])); //isso vale e eh mais facil //showmessage(Format(´¬d´, [integer(fontes)])); //isso não vale lbFonte.Font.Style := TFontStyles(pb^); //poderia ser: lbFonte.Font.Style := TFontStyles(fontes); { OBS: se pb fosse TFontStyles^tambem daria certo na atribuição de pb^, mas precisaria trocar o showmessage(Format(´¬d´, [Pb^])) por showmessage(Format(´¬d´, byte([Pb^]))); ou seja, o TFontStyles não aceita typecasting para integer e vice versa, mas para byte ele aceita. Isto se deve ao tamanho dessas estruturas, que são compativeis. } end;
GOSTEI 0
Xandyr
07/12/2005
Essa técnica salva e carrega todas as propriedades do componente, não somente a fonte, vc pd passar isso para um componente blob
StreamSalva.WriteComponent(FontDialog1);
StreamSalva.ReadComponent(FontDialog1);
StreamSalva.WriteComponent(FontDialog1);
StreamSalva.ReadComponent(FontDialog1);
GOSTEI 0
Vitor Rubio
07/12/2005
Não sabia que dava pra fazer via stream, como que usa? você poderia dar um exemplo?
GOSTEI 0