Elasticsearch not returning intended results - elasticsearch
enter image description hereWondering if anyone can help me, I'm having problems in a search performed on elastic, the search itself is very simple however for some specific words, although, they exist in the intended doc, the hit is not retrieved.
this is the registry I want:
{"_index":"dre-teste","_type":"_doc","_id":"3","_score":1.0,"_source":{
"texto": "Decreto-Lei n.º 189/2008 \rde 24 de Setembro \rA legislação nacional relativa aos produtos cosméticos e de higiene corporal, ma 95/2000"
}
{"_index":"dre-teste","_type":"_doc","_id":"2","_score":1.0,"_source":{
"texto": "Decreto-Lei n.º 189/2008 \rde 24 de Setembro \rA legislação nacional relativa aos produtos cosméticos e de higiene corporal, marcada pela necessidade de garantir os direitos dos consumidores e a protecção da saúde pública, tem vindo a conhecer, nos últimos anos, frequentes alterações, impostas pela necessidade de transposição das sucessivas directivas emanadas dos órgãos comunitários competentes, a maioria das quais visando a adaptação ao progresso técnico e científico. \rO progresso técnico e científico e as sucessivas alterações ocorridas no plano comunitário conduziram à adopção do Decreto-Lei n.º 296/98, de 25 de Setembro, várias vezes alterado. \rPosteriormente, com a sétima alteração substantiva da Directiva n.º 76/768/CEE, do Conselho, de 27 de Julho, relativa à aproximação das legislações dos Estados membros respeitantes aos produtos cosméticos, levada a cabo pela Directiva n.º 2003/15/CE, do Parlamento Europeu e do Conselho, de 27 de Fevereiro, o regime aplicável aos produtos cosméticos e de higiene corporal foi consolidado no Decreto-Lei n.º 142/2005, de 24 de Agosto. O objectivo foi permitir uma aplicação mais efectiva e clara da legislação em vigor, tanto do ponto de vista dos empresários como dos consumidores e das autoridades competentes. \rMantiveram-se, porém, os princípios fundamentais da legislação aplicável aos produtos cosméticos, que já resultavam do Decreto-Lei n.º 296/98, de 25 de Setembro, designadamente a colocação no mercado dos produtos cosméticos e de higiene corporal sem necessidade de obtenção de autorização administrativa prévia. \rO controlo do cumprimento das exigências legais que recaem sobre estes produtos justifica-se essencialmente pela necessidade de protecção da saúde pública. Por isso, importa assegurar a existência de mecanismos de intervenção da Administração que permitam uma eficaz fiscalização e vigilância do cumprimento dessas exigências, garantindo assim, em última análise, a protecção dos direitos e interesses dos consumidores. \rMantém-se por isso a importância do acesso das autoridades públicas envolvidas a um conjunto importante de informações. Assumem um relevo particular a intervenção do INFARMED - Autoridade Nacional do Medicamento e Produtos de Saúde, I. P. (INFARMED, I. P.), autoridade competente no domínio dos produtos cosméticos, e do INEM - Instituto Nacional de Emergência Médica, I. P. (INEM, I. P.), este no domínio da informação antivenenos, através do Centro de Informação Antivenenos (CIAV). \rFace às subsequentes alterações da Directiva n.º 76/768/CEE, do Conselho, de 27 de Julho, relativa à aproximação das legislações dos Estados membros respeitantes aos produtos cosméticos, e consequente adopção de diplomas avulsos, julgou o Governo, uma vez mais, ser oportuno consolidar num só diploma o regime aplicável aos produtos cosméticos e de higiene corporal, de novo com os objectivos de efectividade e clareza na aplicação da legislação em vigor. \rAproveitou ainda o Governo para, na mesma ocasião, dar cumprimento às obrigações internacionais do Estado Português resultantes nomeadamente da recente aprovação de um conjunto de directivas, as Directivas n.os 2007/53/CE e 2007/54/CE, da Comissão, de 29 de Agosto, 2007/67/CE, de 22 de Novembro, e 2008/14/CE, da Comissão, de 15 de Fevereiro, que visam a adaptação do regime ao constante progresso técnico e científico. \rNo presente decreto-lei incluem-se normas que dão cumprimento às obrigações do Estado Português decorrentes da Directiva n.º 76/768/CEE, do Conselho, de 27 de Julho, já transposta, e de um conjunto importante e numeroso de directivas comunitárias, também já transpostas, que alteraram ou completaram a referida directiva e respectivos anexos, incluindo directivas de adaptação ao progresso técnico e científico e directivas de alteração ao corpo da referida directiva base, a saber: \ra) Directiva n.º 82/368/CEE, do Conselho, de 17 de Maio; \rb) Directiva n.º 83/191/CEE, da Comissão, de 30 de Março;\rc) Directiva n.º 83/341/CEE, da Comissão, de 29 de Junho;\rd) Directiva n.º 83/574/CEE, do Conselho, de 26 de Outubro; \re) Directiva n.º eríodo após abertura deve ser sempre utilizado nos casos a que se refere o número anterior, com excepção dos produtos cosméticos que se esgotem numa única utilização, se mostrem totalmente imunes ao contacto com o ambiente exterior ou não apresentem qualquer risco de deterioração passível de prejudicar os consumidores. \r4 - Se a data de durabilidade mínima não exceder os 30 meses, deve ser apresentada na rotulagem pela indicação «A utilizar de preferência antes de...», seguida da: \ra) Própria data, com indicação do dia, mês e ano, por esta ordem; \rb) Própria data, com indicação do mês e ano, por esta ordem, quando não for possível a indicação do dia; \rc) Indicação da localização da data na rotulagem, aplicando-se o disposto nas alíneas anteriores. \r5 - No caso de a pequena dimensão do produto cosmético não permitir a inserção das menções referidas na alínea d) do n.º 1 do artigo anterior, estas devem constar num folheto informativo, rótulo ou cinta seguros ou fixos ao produto cosmético, para os quais o consumidor seja alertado através de uma indicação abreviada ou do símbolo reproduzido no anexo viii, que deve figurar no recipiente e na embalagem exterior. \r6 - A menção referida na alínea e) do n.º 1 do artigo anterior pode constar apenas da embalagem exterior no caso de impossibilidade prática resultante da dimensão reduzida do produto cosmético. \r7 - As menções referidas na alínea g) do n.º 1 ou no n.º 2 do artigo anterior podem figurar unicamente na embalagem exterior e, em caso de impossibilidade prática, em consequência da pequena dimensão do produto cosmético, essas menções devem constar num folheto informativo, rótulo ou cinta juntos ao produto cosmético, para os quais o consumidor seja alertado através de uma indicação abreviada ou do símbolo reproduzido no anexo viii. \r8 - No caso de a dimensão ou a forma do produto cosmético, designadamente sabonetes ou pérolas de banho, não permitir a inserção das menções referidas na alínea g) do n.º 1 ou no n.º 2 do artigo anterior no rótulo, na cinta, no cartão ou no folheto informativo que acompanha o produto cosmético, estas devem figurar num letreiro junto do expositor onde o produto cosmético se encontre para venda. \r9 - Os ministros responsáveis pelas áreas da economia e da saúde podem estabelecer, por portaria, normas técnicas especiais relativas à marcação dos produtos cosméticos que não sejam previamente embalados ou que sejam embalados nos locais de venda a pedido do comprador ou previamente embalados com vista à sua venda imediata. \rArtigo 10.º \rIdioma utilizado \r1 - As menções referidas nas alíneas b) a d) e f) do n.º 1 e no n.º 2 do artigo 8.º devem ser redigidas em língua portuguesa. \r2 - O idioma estrangeiro, quando conste dos produtos cosméticos ou da respectiva rotulagem ou publicidade, pode ser mantido sem tradução para a língua portuguesa desde que não prejudique a aplicação do disposto no número anterior ou viole qualquer outra disposição do presente decreto-lei. \rArtigo 11.º \rPrincípio da verdade \r1 - A rotulagem, a apresentação, os impressos e os folhetos respeitantes aos produtos cosméticos, bem como o texto, as denominações de venda, marcas, imagens ou outros sinais, figurativos ou não, e as menções publicitárias não devem ser susceptíveis de induzir o consumidor em erro sobre as suas características ou ser utilizados para atribuir qualidades ou propriedades que não possuem ou que produtos cosméticos não podem possuir, designadamente, indicações terapêuticas ou actividade biocida. \r2 - O fabricante ou a pessoa responsável pela colocação no mercado do produto cosmético só pode indicar, no recipiente, na embalagem exterior ou em qualquer documento, menção publicitária, etiqueta, rotulagem, cinta, cartão ou folheto informativo, que o produto cosmético não foi objecto de quaisquer ensaios em animais se o fabricante e os seus fornecedores não tiverem efectuado ou encomendado quaisquer ensaios em animais de produtos cosméticos acabados ou do seu protótipo, ou de qualquer dos ingredientes nele contidos, nem tiverem utilizado ingredientes experimentados em animais para o desenvolvimento de novos produtos cosméticos por terceiros. \r3 - Em relação ao disposto no número anterior, observar-se-ão as orientações fixadas ao nível comunitário, tal como adoptadas pelo INFARMED, I. P. \rArtigo 12.º \rLei aplicável à publicidade \rSem prejuízo do disposto no presente decreto-lei, designadamente quanto à rotulagem, menções ou idioma utilizados, aplica-se à publicidade de produtos cosméticos o disposto no Código da Publicidade. \rCAPÍTULO IV \rConfidencialidade \rArtigo 13.º \rPedido de confidencialidade de ingredientes \r1 - Quando, por razões de protecção de segredos comerciais, o fabricante, o seu mandatário ou o responsável pela colocação no mercado de um produto cosmético desejem a não inscrição, na rotulagem de um produto cosmético, de um ou vários ingredientes que dela devam constar, podem requerer ao INFARMED, I. P., a confidencialidade das referidas menções. \r2 - O requerimento deve ser acompanhado dos seguintes elementos: \ra) Nome ou firma e endereço ou sede social do requerente; \rb) Identificação precisa do ingrediente para o qual é requerida a confidencialidade, com indicação das seguintes informações: \ri) Números Chemical Abstract Service (CAS), European Inventory of Existing Commercial Chemical Substances (EINECS) e Colour Index (CI), denominação química, denominação International Union of Pure and Applied Chemistry (IUPAC), denominação International Nomenclature Cosmetic Ingredient (INCI - anteriormente com a denominação CTFA), denominação da Farmacopeia Europeia e denominação comum internacional da Organização Mundial de Saúde; \rii) A denominação European List of Notified Chemical Substances (ELINCS) e o número oficial que lhe foi atribuído, se tiver sido objecto de notificação ao abrigo do Decreto-Lei n.º 82/95, de 22 de Abril, na redacção conferida pelo Decreto-Lei n.º 260/2003, de 21 de Outubro, bem como a indicação do deferimento ou indeferimento de um pedido de confidencialidade no âmbito daquele diploma; \riii) Nome do material de base, nome da parte da planta ou do animal utilizado e nomes dos componentes, ou ingredientes, tais como solventes ou conservantes, se os nomes e números referidos nas subalíneas i) e ii) não existirem, como acontece, por exemplo, com os ingredientes de origem natural; \rc) A avaliação da segurança do ingrediente, tal como foi utilizado no ou nos produtos cosméticos acabados, para a saúde humana, tendo em consideração o perfil toxicológico, a estrutura química e o nível de exposição do ingrediente de acordo com as condições especificadas na documentação técnica referida nas alíneas d) e e) do n.º 1 e no n.º 2 do artigo 26.º; \rd) A utilização previsível do ingrediente e, em especial, as diferentes categorias de produtos cosméticos em que é ou será utilizado; \re) Uma exposição pormenorizada e devidamente documentada dos motivos pelos quais a confidencialidade é excepcionalmente requerida, nomeadamente do facto de: \ri) A identidade do ingrediente ou a sua função no produto cosmético a comercializar não estar descrita em nenhuma bibliografia ou ser desconhecida de acordo com os dados científicos conhecidos; \rii) A informação ainda não ser do domínio público, embora tenha sido solicitado o registo da patente para o ingrediente ou para a sua utilização; \riii) A informação, se conhecida, poder ser facilmente reprodutível, com prejuízo para o requerente; \rf) Caso seja conhecido, o nome de cada produto cosmético que conterá o ingrediente e, se for possível prever a utilização de nomes diferentes no mercado comunitário, indicações precisas sobre cada um deles: \ri) Se o nome do produto cosmético ainda não for conhecido, o mesmo pode ser comunicado posteriormente desde que até 15 dias consecutivos antes da sua colocação no mercado; \rii) Se o ingrediente for utilizado em vários produtos cosméticos, pode ser feito um único pedido de confidencialidade desde que os produtos cosméticos sejam claramente identificados na comunicação ao INFARMED, I. P.; \rg) Uma declaração em que se indique se foi apresentado um pedido à autoridade competente de outro Estado membro relativo ao ingrediente para o qual é requerida a confidencialidade e qual o seguimento dado a esse requerimento. \r3 - É aplicável às informações previstas no número anterior, com as devidas adaptações, o disposto no artigo 27.º \r4 - Após recepção de um pedido de confidencialidade, apresentado em conformidade com o disposto nos números anteriores, o INFARMED, I. P., decide no prazo de quatro meses. \r5 - O prazo previsto no número anterior pode ser prorrogado por um período máximo de dois meses, devendo o INFARMED, I. P., informar o requerente por escrito, por via electrónica ou postal, da decisão de prorrogação. \rArtigo 14.º \rDecisão do pedido \r1 - A decisão sobre o pedido de confidencialidade é notificada ao requerente, acompanhada, no caso de indeferimento, dos respectivos fundamentos. \r2 - Da decisão de indeferimento cabe recurso, nos termos gerais. \r3 - No caso de deferimento do pedido, a notificação prevista no n.º 1 é acompanhada do número de registo atribuído ao ingrediente, constituído de acordo com o anexo viii-B ao presente decreto-lei, que dele faz parte integrante. \r4 - O número de registo atribuído ao ingrediente substitui a identificação do ingrediente na lista dos ingredientes referida na alínea g) do n.º 1 do artigo 8.º \r5 - Cada decisão refere-se a um único ingrediente e deve especificar os produtos cosméticos em que vai ser utilizado no mercado comunitário. \r6 - Toda e qualquer modificação das informações fornecidas em conformidade com o disposto no artigo anterior deve ser imediatamente comunicada ao INFARMED, I. P. \r7 - As modificações dos nomes dos produtos cosméticos nos quais o ingrediente está integrado devem ser comunicadas ao INFARMED, I. P., até 15 dias, consecutivos, antes da colocação no mercado dos produtos cosméticos com os novos nomes. \r8 - Em função das alterações referidas no número anterior, ou se novos elementos o impuserem, em especial por razões imperativas de saúde pública, o INFARMED, I. P., pode revogar a decisão de concessão da confidencialidade, aplicando-se o disposto nos n.os 1 e 2, com as devidas adaptações. \rArtigo 15.º \rValidade da confidencialidade \r1 - A decisão que concede a confidencialidade é válida por um período de cinco anos. \r2 - Caso razões excepcionais o justifiquem, o beneficiário da decisão de confidencialidade pode requerer ao INFARMED, I. P., a prorrogação da decisão por um prazo igual ou inferior a três anos. \r3 - Da decisão do INFARMED, I. P., cabe recurso, nos termos gerais. \rArtigo 16.º \rTransmissão de decisões relativas a confidencialidade \r1 - O INFARMED, I. P., informa a Comissão Europeia e as autoridades competentes dos restantes Estados membros das decisões de concessão de confidencialidade ou de prorrogação da mesma, bem como das decisões de indeferimento, revogação ou recusa de prorrogação da decisão relativa à confidencialidade. \r2 - A comunicação relativa a decisões de concessão ou prorrogação da confidencialidade é acompanhada dos seguintes elementos: \ra) Nome ou firma e endereço ou sede social dos requerentes; \rb) Nomes do produto ou dos produtos cosméticos que contêm o ingrediente objecto da decisão de confidencialidade; \rc) Número de registo referido no n.º 3 do artigo 14.º \r3 - Nos casos previstos no número anterior, a pedido da Comissão Europeia ou da autoridade competente de outro Estado membro, o INFARMED, I. P., remete cópia do processo, da qual constem o pedido de confidencialidade e a decisão sobre este proferida. \r4 - Sem prejuízo da faculdade prevista no número seguinte, o INFARMED, I. P., reconhecerá as decisões sobre a confidencialidade concedidas pelas autoridades competentes dos outros Estados membros. \r5 - Para os efeitos previstos no número anterior, o INFARMED, I. P., pode solicitar uma cópia da decisão da autoridade competente do Estado membro que concedeu a confidencialidade ou a respectiva prorrogação e, caso considere injustificada a referida decisão, pode requerer uma decisão da Comissão Europeia, nos termos previstos no artigo 10.º da Directiva n.º <a href=\"eurlex.asp?ano=1976&id=376L0768\" title=\"Link para Directiva da Comunidade Europeia\">76/768/CEE. \r6 - O INFARMED, I. P., adopta as medidas necessárias para assegurar o respeito pela confidencialidade dos dados de que tenha conhecimento. \rCAPÍTULO V \rComercialização \rArtigo 17.º \rNotificação \r1 - O fabricante, o seu mandatário ou o responsável pela colocação no mercado nacional de um produto cosmético deve informar o INFARMED, I. P., do local de fabrico ou da primeira importação para um Estado membro do produto cosmético. \r2 - Da notificação a que se refere o número anterior deve ainda constar: \ra) O nome e endereço do fabricante e do responsável pela colocação do produto cosmético no mercado nacional; \rb) A marca e identificação do produto cosmético colocado no mercado; \rc) Documento comprovativo da recepção pelo CIAV do documento previsto no n.º 2 do artigo 3.º; \rd) O nome, endereço e outras formas de contacto expedito com o técnico a que se refere o artigo 24.º, acompanhada de um breve curriculum vitae; \re) O endereço do local onde se encontra a documentação técnica a que se refere o n.º 1 do artigo 26.º; \rf) O certificado comprovativo do reconhecimento oficial do laboratório fabricante; \rg) O certificado de controlo do produto acabado por cada lote de fabrico; \rh) A data da colocação do produto cosmético no mercado nacional. \r3 - O disposto nas alíneas d) a g) do número anterior é dispensado no que toca à notificação de produtos cosméticos fabricados num Estado membro. \rArtigo 18.º \rConformidade \rSalvo nos casos previstos no presente decreto-lei, o INFARMED, I. P., não pode recusar, proibir ou restringir a colocação no mercado de produtos cosméticos que respeitem o disposto na lei. \rArtigo 19.º \rDistribuição por grosso \r1 - A distribuição por grosso de produtos cosméticos rege-se por legislação especial. \r2 - Até à adopção da legislação referida no número anterior, a distribuição por grosso de produtos cosméticos deve ser notificada ao conselho directivo do INFARMED, I. P., o qual define, por regulamento, os elementos que devem ser transmitidos. \rCAPÍTULO VI \rActividade industrial \rArtigo 20.º \rUnidades industriais \r1 - Sem prejuízo do disposto no presente decreto-lei, a instalação, alteração e laboração dos estabelecimentos industriais destinados ao fabrico e acondicionamento de produtos cosméticos obedecem ao disposto no Decreto-Lei n.º 69/2003, de 10 de Abril. \r2 - Os produtos cosméticos não podem ser fabricados e acondicionados fora de unidades estabelecidas em conformidade com o disposto no número anterior. \r3 - O fabrico de produtos cosméticos deve observar as normas relativas às boas práticas de fabrico, aprovadas por portaria do Ministro da Saúde. \rArtigo 21.º \rLaboratórios de controlo \r1 - As unidades industriais a que se refere o artigo anterior e os importadores de produtos cosméticos semipreparados devem assegurar a qualidade das matérias-primas e dos produtos acabados, designadamente dispondo, para efeitos da necessária verificação, por si ou com recurso ao serviço de terceiros, de laboratório de controlo. \r2 - Para efeitos de verificação da qualidade, as matérias-primas e os produtos acabados devem ser objecto de registo de controlo, de acordo com as boas práticas de fabrico a que se refere o artigo anterior. \r3 - Na verificação da qualidade das matérias-primas e dos produtos acabados devem ser observadas as normas relativas às boas práticas de laboratório constantes dos Decretos-Leis n.os 95/2000, de 23 de Maio, e 99/2000, de 30 de Maio. \rArtigo 22.º \rCertificado de controlo \r1 - Os importadores ou os responsáveis pela colocação no mercado de produtos cosméticos a granel ou acabados e embalados na origem devem possuir, por cada lote de fabrico, os respectivos certificados de controlo que devem ser apresentados às autoridades aduaneiras, bem como documento comprovativo do reconhecimento oficial do laboratório fabricante. \r2 - Estão dispensados do cumprimento do disposto no número anterior os produtos cosméticos fabricados num Estado membro. \rArtigo 23.º \rImportação \r1 - No âmbito das suas atribuições, compete às autoridades aduaneiras verificar, nos termos do disposto no Regulamento (CE) n.º 339/93, do Conselho, de 8 de Fevereiro, que os produtos cosméticos e de higiene corporal declarados para introdução em livre prática e no consumo se encontram em conformidade com as disposições do presente decreto-lei. \r2 - Verificada a não conformidade, a Direcção-Geral das Alfândegas e dos Impostos Especiais sobre o Consumo (DGAIEC) suspende o desalfandegamento do produto em causa, de acordo com os procedimentos previstos no regulamento referido no número anterior. \rArtigo 24.º \rTécnico responsável \rOs fabricantes e os responsáveis pela colocação no mercado de produtos cosméticos importados devem ser assistidos por um técnico qualificado, que com eles assume, solidariamente, a responsabilidade pela observância do disposto no presente decreto-lei e na respectiva regulamentação. \rArtigo 25.º \rQualificação do técnico \r1 - O técnico qualificado a que se refere o artigo anterior deve possuir uma das qualificações seguintes: \ra) Licenciatura ou bacharelato em Ciências Farmacêuticas, Química, Biologia, Medicina ou Engenharia Química, obtidos em universidade portuguesa ou de outro Estado membro; \rb) Licenciatura ou bacharelato, reconhecidos em Portugal, em Química Cosmética ou Cosmetologia por universidades estrangeiras; \rc) Licenciatura ou bacharelato em curso especificamente reconhecido por despacho do Ministro da Educação como equivalente a algum dos indicado"}
when i perform the search
{
"_source": {
"includes": [],
"excludes": ["texto"]
},
"track_total_hits": true,"from": 0,"size": 100,
"query": {
"simple_query_string" : {
"query": "\"189/2008\"",
"fields": ["texto"]
}
},
"highlight": {
"fields": {
"texto": {}
}
}
}
it returns the result
{
"took": 128,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.22584093,
"hits": [
{
"_index": "dre-teste",
"_type": "_doc",
"_id": "3",
"_score": 0.22584093,
"_source": {},
"highlight": {
"texto": [
"Decreto-Lei n.º <em>189/2008</em> \rde 24 de Setembro \rA legislação nacional relativa aos produtos cosméticos e"
]
}
}
]
}
}
However when i perform the similar search:
{
"_source": {
"includes": [],
"excludes": ["texto"]
},
"track_total_hits": true,"from": 0,"size": 100,
"query": {
"simple_query_string" : {
"query": "\"95/2000\"",
"fields": ["texto"]
}
},
"highlight": {
"fields": {
"texto": {}
}
}
}
it returns
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1.6588712,
"hits": [
{
"_index": "dre-teste",
"_type": "_doc",
"_id": "3",
"_score": 1.6588712,
"_source": {},
"highlight": {
"texto": [
"de 24 de Setembro \rA legislação nacional relativa aos produtos cosméticos e de higiene corporal, ma <em>95</em>"
]
}
}
]
}
}
There are more entries with 95/2000 and they don't even appear in the hits.
I very newbie on Elastic so this might be a simple fix, but i tried almost every search in the API, and constructed different analyzers but no success. IF anybody could help me, i would gratefully in debt.
Thank you all
The default fragment_size parameter inside of any highlighter is 100 and that's the reason your texto was truncated.
You can either increase that parameter or set the number_of_fragments parameter to 0 to make sure your whole texto field is returned and highlighted:
{
"_source": {
"includes": [],
"excludes": [ "texto" ]
},
"track_total_hits": true,
"from": 0,
"size": 100,
"query": {
"simple_query_string": {
"query": "\"95/2000\"",
"fields": [ "texto" ]
}
},
"highlight": {
"fields": {
"texto": {
"number_of_fragments": 0 <---
}
}
}
}
As to why
are more entries with 95/2000 and they don't even appear in the hits
you'll need to provide more of the said entries in order for me to debug this.
Related
Meu projeto MAUI .net6 nao esta funcionando! problema no sdk [closed]
Closed. This question is not written in English. It is not currently accepting answers. Stack Overflow is an English-only site. The author must be able to communicate in English to understand and engage with any comments and/or answers their question receives. Don't translate this post for the author; machine translations can be inaccurate, and even human translations can alter the intended meaning of the post. Closed 2 days ago. Improve this question Eu estou precisando criar um projeto MAUI .net6, só que ao criar um projeto MAUI novo com a estrutura .net6, ele dá os seguintes erros: Gravidade Código Descrição Projeto Arquivo Linha Estado de Supressão Erro O projeto "C:\Program Files\dotnet\sdk\7.0.103\Sdks\Microsoft.NET.Sdk\16.2.1024\targets\Xamarin.Shared.Sdk.MultiTarget.targets" não foi importado por "C:\Program Files\dotnet\sdk\7.0.103\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.targets" em (1226,3) porque o arquivo não existia. MauiApp8 C:\Program Files\dotnet\sdk\7.0.103\Sdks\Microsoft.NET.Sdk\16.2.1024\targets\Xamarin.Shared.Sdk.MultiTarget.targets 1226 Gravidade Código Descrição Projeto Arquivo Linha Estado de Supressão Erro O projeto "C:\Program Files\dotnet\sdk\7.0.103\Sdks\Microsoft.NET.Sdk\16.2.1024\targets\Xamarin.Shared.Sdk.MultiTarget.targets" não foi importado por "C:\Program Files\dotnet\sdk\7.0.103\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.targets" em (1226,3) porque o arquivo não existia. MauiApp8 C:\Program Files\dotnet\sdk\7.0.103\Sdks\Microsoft.NET.Sdk\16.2.1024\targets\Xamarin.Shared.Sdk.MultiTarget.targets 1226 Gravidade Código Descrição Projeto Arquivo Linha Estado de Supressão Erro NU1012 A versão da plataforma não está presente para uma ou mais estruturas de destino, embora elas tenham uma plataforma especificada: net6.0-ios, net6.0-maccatalyst MauiApp8 C:\Users\Devoloper\source\repos\MauiApp8\MauiApp8\MauiApp8.csproj 1 Se eu crio um projeto MAUI novo com as estrutura .net7 ele tambem da erro: Gravidade Código Descrição Projeto Arquivo Linha Estado de Supressão Erro NU1012 A versão da plataforma não está presente para uma ou mais estruturas de destino, embora elas tenham uma plataforma especificada: net7.0-ios, net7.0-maccatalyst MauiApp9 C:\Users\Devoloper\source\repos\MauiApp9\MauiApp9\MauiApp9.csproj 1 Não consigo saber oque esta acontecendo, porque todos os sdk estão instalados, tanto o .net6 quanto o .net7, verifiquei o caminho das pastas dos sdk e está tudo la. Nao consigo entender o porque desses erros, se alguem conseguir me ajudar eu agradeço Eu tentei reinstalar os sdk e reparar o visual studio, e mesmo assim dava o mesmo erro.
nmake compilation error for GitHub program
I know next to nothing about Microsoft. I'm trying to use this program in Windows. I opened a Development Command Prompt Window and wrote on the command line: nmake -f Makefile.win, but it didn't work. There are some compiling errors but I don't know what they mean. Does someone know how to solve this? link.exe /nologo /out:..\mseed2ascii.exe ..\libmseed\libmseed.lib mseed2ascii.obj mseed2ascii.obj : error LNK2019: símbolo externo _zs_init sin resolver al que se hace referencia en la función _main mseed2ascii.obj : error LNK2019: símbolo externo _zs_free sin resolver al que se hace referencia en la función _main mseed2ascii.obj : error LNK2019: símbolo externo _zs_entrybegin sin resolver al que se hace referencia en la función _writeascii mseed2ascii.obj : error LNK2019: símbolo externo _zs_entrydata sin resolver al que se hace referencia en la función _writedata mseed2ascii.obj : error LNK2019: símbolo externo _zs_entryend sin resolver al que se hace referencia en la función _writeascii mseed2ascii.obj : error LNK2019: símbolo externo _zs_finish sin resolver al que se hace referencia en la función _main ..\mseed2ascii.exe : fatal error LNK1120: 6 externos sin resolver NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\bin\HostX86\x86\link.exe"' : código devuelto '0x460' Stop. NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\bin\HostX86\x86\nmake.EXE"' : código devuelto '0x2' Stop.
Pascal compilation error
This is the code: program pi18; var a,b,c,P:real; begin read(a,b,c); if(a+b<c) or (b+c<a) or (a+c<b) then writeln('Nu exista asa triunghi') else begin P:=a+b+c; if(a=b) and (a=c) then write('Triunghiul este echil') else if(sqr(a) = sqr(b) + sqr(c)) or (sqr(b) = sqr(a) + sqr(c)) or (sqr(c) = sqr(a) + sqr(b)) then write('Triunghiul este dreptunghic'); readln(); else write('Triunghiul este arbitrar'); readln(); end; writeln('Perimetrul este: ', P); end. And I have this error: Syntax error, ";" expected but "ELSE" found This code is for: - says the perimeter of a triangle. - compare if the a,b,c are numbers for some types of triangles.
If you want to execute multiple statements when a condition is true, you need to wrap them with begin and end. Putting them on the same line doesn't automatically group them. So you need begin and end around: write('Triunghiul este dreptunghic'); readln(); and write('Triunghiul este arbitrar'); readln(); Since you didn't do this, it just processes the first statement as the if block. When it sees the else statement, it reports an error because there's no preceding if statement to match it with.
In Pascal if you have multiple statements between then and else you still need to put begin and end around them: if(sqr(a) = sqr(b) + sqr(c)) or (sqr(b) = sqr(a) + sqr(c)) or (sqr(c) = sqr(a) + sqr(b)) then begin write('Triunghiul este dreptunghic'); readln(); end else
Your code lacks begin-end around the multiple statements following if: if(a=b) and (a=c) then write('Triunghiul este echil') // single statement, no begin-end required (but possible) else if(sqr(a) = sqr(b) + sqr(c)) or (sqr(b) = sqr(a) + sqr(c)) or (sqr(c) = sqr(a) + sqr(b)) then begin write('Triunghiul este dreptunghic'); readln(); end else begin write('Triunghiul este arbitrar'); readln(); end; To make this more consistent, I would even do: if(a=b) and (a=c) then begin write('Triunghiul este echil') end else etc...
Get service name from the path of its executable
I have the path to an executable which is a running service application. For example: C:\Program Files (x86)\Someapp\somesvc.exe I want to stop and start it, and for that I suppose I need to get the name of the service as it is outlined in [this] answer. I might get this by iterating trough all the registry entries of all the services at HKLM\System\CurrentControlSet\Services, and checking if the ImagePath registry key matches my executable path. This solution should work, but it seems wrong to me. Is there a better way to do this?
Use EnumServicesStatus() or EnumServicesStatusEx() to enumerate installed services. That will give you the name of each service, but not its ImagePath. To retrieve that, you can open each service using OpenService(SERVICE_QUERY_CONFIG) and then get its ImagePath using QueryServiceConfig().
You can query to WMI for services that PathName is like your path. NOTE: Some path include params. You can't use equal (use Like). You can use some code like this to query WMI: //----------------------------------------------------------------------------------------------------- // This code was generated by the Wmi Delphi Code Creator (WDCC) Version 1.9.9.350 // http://code.google.com/p/wmi-delphi-code-creator/ // Blog http://theroadtodelphi.wordpress.com/wmi-delphi-code-creator/ // Author Rodrigo Ruz V. (RRUZ) Copyright (C) 2011-2015 //----------------------------------------------------------------------------------------------------- // // LIABILITY DISCLAIMER // THIS GENERATED CODE IS DISTRIBUTED "AS IS". NO WARRANTY OF ANY KIND IS EXPRESSED OR IMPLIED. // YOU USE IT AT YOUR OWN RISK. THE AUTHOR NOT WILL BE LIABLE FOR DATA LOSS, // DAMAGES AND LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING OR MISUSING THIS CODE. // //---------------------------------------------------------------------------------------------------- program GetWMI_Info; {$APPTYPE CONSOLE} uses SysUtils, ActiveX, ComObj, Variants; // La clase Win32_Service representa un servicio en un sistema Win32. Un // aplicación de servicio cumple las reglas de la interfaz del Administrador de // control de servicios (SCM, Service Control Manager) y un usuario la puede // iniciar automáticamente al arrancar el sistema a través del programa Servicios // del Panel de control o mediante una aplicación que utilice las funciones de // servicio de la API de Win32. Los servicios se pueden ejecutar aunque ningún // usuario haya iniciado sesión en el sistema. procedure GetWin32_ServiceInfo(sPath:String); const WbemUser =''; WbemPassword =''; WbemComputer ='localhost'; wbemFlagForwardOnly = $00000020; var FSWbemLocator : OLEVariant; FWMIService : OLEVariant; FWbemObjectSet: OLEVariant; FWbemObject : OLEVariant; oEnum : IEnumvariant; iValue : LongWord; begin; FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator'); FWMIService := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword); FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_Service WHERE PathName like "%' + sPath + '%"','WQL',wbemFlagForwardOnly); oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant; while oEnum.Next(1, FWbemObject, iValue) = 0 do begin Writeln(Format('Caption %s',[String(FWbemObject.Caption)]));// String Writeln(Format('DisplayName %s',[String(FWbemObject.DisplayName)]));// String Writeln(Format('Name %s',[String(FWbemObject.Name)]));// String Writeln(Format('PathName %s',[String(FWbemObject.PathName)]));// String Writeln(''); FWbemObject:=Unassigned; end; end; begin try CoInitialize(nil); try GetWin32_ServiceInfo(ExtractFileName('c:\windows\system\locator.exe')); finally CoUninitialize; end; except on E:EOleException do Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode])); on E:Exception do Writeln(E.Classname, ':', E.Message); end; Writeln('Press Enter to exit'); Readln; end. If you need more properties, add to precedure. For query with: 'c:\windows\system\locator.exe', you obtain: For query with: 'C:\Program Files (x86)\Skype\Updater\Updater.exe', you obtain: For Start and Stop the service, tou need the property Name.
Inno Setup How to edit a ini file during the installation [closed]
It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center. Closed 10 years ago. I am making an installer that needs to edit an INI file during the installation. In this case I need to edit only two keys from that ini file. These two: filename: rev.ini; Section: Emulator; Key: Language; filename: rev.ini; Section: steamclient; Key: PlayerName; I Want The installer to give me the option to select the laguage or use the default language that I already selected from the start in the lenguage menu, and for the PlayerName. Give the option to write any name i want. I didnt see anything like this. only read or put established values in inifiles. this is my code: ; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! #include "botva2.iss" #include "BASS_Module.iss" #define MyAppName "XXX" #define MyAppVersion "XXX" #define MyAppPublisher "XXX" #define MyAppURL "example.com" [Setup] ; NOTE: The value of AppId uniquely identifies this application. ; Do not use the same AppId value in installers for other applications. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) AppID={{AA8DB34C-8DE2-468C-8A3A-0DADD1A9C38E} AppName={#MyAppName} AppVersion={#MyAppVersion} ;AppVerName={#MyAppName} {#MyAppVersion} AppPublisher={#MyAppPublisher} AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} DefaultDirName={pf}\ DefaultGroupName={#MyAppName} LicenseFile=Log1.rtf InfoBeforeFile=Log2.rtf InfoAfterFile=Log3.rtf OutputDir=Output Installer\ OutputBaseFilename=XXX 2xxx-2xxx SetupIconFile=xxx.ico Compression=lzma2/Ultra64 SolidCompression=true InternalCompressLevel=Ultra64 Uninstallable=false WizardImageFile=fondosetup.bmp WizardSmallImageFile=0.bmp CreateAppDir=true UsePreviousAppDir=true DirExistsWarning=no AllowCancelDuringInstall=false [Languages] Name: "default"; MessagesFile: "compiler:Default.isl" Name: "catalan"; MessagesFile: "compiler:Languages\Catalan.isl" Name: "french"; MessagesFile: "compiler:Languages\French.isl" Name: "german"; MessagesFile: "compiler:Languages\German.isl" Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl" Name: "portuguese"; MessagesFile: "compiler:Languages\Portuguese.isl" Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl" [CustomMessages] default.AppCheckError=xxx was not found, please select the Installation Folder of xxx! spanish.AppCheckError=xxx no fué encontrado, porfavor selecciona la Carpeta de Instalación de xxx! french.AppCheckError=xxx n'a pas été trouvé, s'il vous plaît sélectionnez le dossier d'installation de xxx! german.AppCheckError=xxx nicht gefunden wurde, wählen Sie bitte das Installationsverzeichnis von xxx! catalan.AppCheckError=xxx no s'ha trobat, si us plau, seleccioneu la carpeta d'instal · lació de xxx! italian.AppCheckError=xxx non è stato trovato, si prega di selezionare la cartella di installazione di xxx! portuguese.AppCheckError=xxx não foi encontrado, selecione a pasta de instalação do xxx! [Files] Source: "xxx\*"; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; Source: ISSkin.dll; DestDir: {tmp}; Flags: dontcopy; Source: Styles\LegendsIV.cjstyles; DestDir: {tmp}; Flags: dontcopy Source: IsUtilsHb.dll; DestDir: {tmp}; Flags: dontcopy; Source: SplashScreen.png; DestDir: {tmp}; Flags: dontcopy; Source: "BASS_Files\*"; DestDir: {tmp}; Flags: dontcopy Source: Music.mp3; DestDir: {tmp}; Flags: dontcopy Source: logo.png; Flags: dontcopy; DestDir: {tmp}; Source: ISLogo.dll; Flags: dontcopy; DestDir: {tmp}; ; --- Generated by InnoSetup Script Joiner version 3.0, Jul 22 2009, (c) Bulat Ziganshin <Bulat.Ziganshin#gmail.com>. More info at http://issjoiner.codeplex.com/ ; --- Source: Verificar ExE.iss ------------------------------------------------------------ [code] function NextButtonClick1(PageId: Integer): Boolean; begin Result := True; if (PageId = wpSelectDir) and not FileExists(ExpandConstant('{app}\left4dead2.exe')) then begin MsgBox(ExpandConstant('{cm:AppCheckError}'), mbInformation, MB_OK); Result := False; exit; end; end; [Setup] ; --- Source: About.iss ------------------------------------------------------------ [Code] { RedesignWizardFormBegin } // Don't remove this line! // Don't modify this section. It is generated automatically. var AboutButton: TNewButton; URLLabel: TNewStaticText; procedure AboutButtonClick(Sender: TObject); forward; procedure URLLabelClick(Sender: TObject); forward; procedure RedesignWizardForm; begin { AboutButton } AboutButton := TNewButton.Create(WizardForm); with AboutButton do begin Name := 'AboutButton'; Parent := WizardForm; Left := ScaleX(10); Top := ScaleY(327); Width := ScaleX(75); Height := ScaleY(23); Caption := 'Info'; // aqui se escribe lo que quiero ver en el about OnClick := #AboutButtonClick; end; { URLLabel } URLLabel := TNewStaticText.Create(WizardForm); with URLLabel do begin Name := 'URLLabel'; Parent := WizardForm; Cursor := crHand; Caption := 'WEB'; // nombre q desea poner q redirecciona al enlace Font.Color := clRed; // color Font.Height := -11; Font.Name := 'Tele-Marines'; //nombre del font ParentFont := False; OnClick := #URLLabelClick; Left := ScaleX(105); Top := ScaleY(335); Width := ScaleX(97); Height := ScaleY(14); end; AboutButton.TabOrder := 5; URLLabel.TabOrder := 6; end; procedure URLLabelClick(Sender: TObject); var ErrorCode: Integer; begin ShellExecAsOriginalUser('open', 'www.example.com', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode); end; //aqui ponen el enlace de su perfil o pagina procedure AboutButtonClick(Sender: TObject); begin MsgBox('Version 2xxx XXX', mbInformation, mb_Ok); end; //edit the version file here procedure InitializeWizard2(); begin RedesignWizardForm; end; [Setup] ; --- Source: Audio.iss ------------------------------------------------------------ [code] procedure InitializeWizard3(); begin ExtractTemporaryFile('BASS.dll'); ExtractTemporaryFile('Music.mp3'); BASS_Init(ExpandConstant('{tmp}\Music.mp3')) // se copea en los temporarles de tu pc end; [Setup] ; --- Source: LOGO XXX.iss ------------------------------------------------------------ [Code] procedure Logo_Init(Wnd :HWND); external 'ISLogo_Init#files:ISLogo.dll stdcall'; procedure Logo_Draw(FileName: PChar; X, Y: Integer); external 'ISLogo_Draw#files:ISLogo.dll stdcall'; procedure Logo_Free(); external 'ISLogo_Free#files:ISLogo.dll stdcall'; procedure InitializeWizard4(); var LogoPanel: TPanel; begin LogoPanel := TPanel.Create(WizardForm); with LogoPanel do begin Top := 326; Left := 140; Width := 100; Height := 37; Parent := WizardForm; BevelOuter := bvNone; end ExtractTemporaryFile('logo.png'); Logo_Init(LogoPanel.Handle) Logo_Draw (ExpandConstant('{tmp}\logo.png'), 0 , 0); end; [Setup] ; --- Source: Skin Setup.iss ------------------------------------------------------------ [Code] // Importing LoadSkin API from ISSkin.DLL procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin#files:isskin.dll stdcall'; // Importing UnloadSkin API from ISSkin.DLL procedure UnloadSkin(); external 'UnloadSkin#files:isskin.dll stdcall'; // Importing ShowWindow Windows API from User32.DLL function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow#user32.dll stdcall'; function InitializeSetup5(): Boolean; begin ExtractTemporaryFile('LegendsIV.cjstyles'); LoadSkin(ExpandConstant('{tmp}\LegendsIV.cjstyles'), ''); Result := True; end; procedure DeinitializeSetup5(); begin // Hide Window before unloading skin so user does not get // a glimse of an unskinned window before it is closed. ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0); UnloadSkin(); end; [Setup] ; --- Source: Splashpng.iss ------------------------------------------------------------ [Code] function SplashScreen(hWnd: Integer; pathPng: String; nSleep: Integer): Integer; external 'SplashScreen#files:IsUtilsHb.dll stdcall'; procedure InitializeWizard6(); var SplashFileName: String; begin SplashFileName := ExpandConstant('{tmp}\SplashScreen.png'); ExtractTemporaryFile('SplashScreen.png'); SplashScreen (StrToInt(ExpandConstant('{hwnd}')), SplashFileName, 2000); end; [Setup] ; --- Source: Texto Transparente Banner.iss ------------------------------------------------------------ [code] var PageNameLabel, PageDescriptionLabel: TLabel; procedure InitializeWizard7(); begin PageNameLabel := TLabel.Create(WizardForm); with PageNameLabel do begin Left := ScaleX(10); // mover el titulo de arriba (menor izq o mayor der) Top := ScaleY(10); Width := ScaleX(300); // ancho del titulo de texto arriba Height := ScaleY(14); // altura del titulo de texto de arriba AutoSize := False; WordWrap := True; Font.Color := clWhite; // color de texto Font.Style := [fsBold]; ShowAccelChar := False; Transparent := True; Parent := WizardForm.MainPanel; end; PageDescriptionLabel := TLabel.Create(WizardForm); with PageDescriptionLabel do begin Left := ScaleX(15); // mover la descripcion de abajo (menor izq o mayor der) Top := ScaleY(25); Width := ScaleX(475); // ancho de la descripcion de texto abajo Height := ScaleY(30); // altura de la descripcion de texto abajo AutoSize := False; WordWrap := True; Font.Color := clWhite; // color de texto ShowAccelChar := False; Transparent := True; Parent := WizardForm.MainPanel; end; with WizardForm do begin PageNameLabel.Hide; PageDescriptionLabel.Hide; with MainPanel do begin with WizardSmallBitmapImage do begin Left := ScaleX(0); // mover la imagen (menor izq o mayor der) Top := ScaleY(0); Width := Mainpanel.Width; Height := MainPanel.Height; end; end; end; end; procedure CurPageChanged7(CurPageID: Integer); begin PageNameLabel.Caption := WizardForm.PageNameLabel.Caption; PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption; end; [Setup] ; --- Source: Texto Transparente Menú.iss ------------------------------------------------------------ [code] function NextButtonClick8(CurPageID: Integer): Boolean; begin Result := True; end; function GetCustomSetupExitCode8(): Integer; begin Result := 1; end; procedure InitializeWizard8(); var WLabel1, WLabel2, FLabel1, FLabel2: TLabel; begin WizardForm.WelcomeLabel1.Hide; WizardForm.WelcomeLabel2.Hide; WizardForm.FinishedHeadingLabel.Hide; WizardForm.FinishedLabel.Hide; WizardForm.WizardBitmapImage.Width := 500; // tamaño de imagen bienvendia ancho WizardForm.WizardBitmapImage.Height := 315; // tamaño de imagen bienvendia altura WLabel1 := TLabel.Create(WizardForm); // PAGINA BIENVENIDO.. WLabel1.Left := ScaleX(40); // mover el titulo de arriba (menor izq o mayor der) WLabel1.Top := ScaleY(30); WLabel1.Width := ScaleX(301); // ancho del cuadro de texto arriba WLabel1.Height := ScaleY(65); // altura del cuadro de texto de arriba WLabel1.AutoSize := False; WLabel1.WordWrap := True; WLabel1.Font.Name := 'Arial'; // nombre del font WLabel1.Font.Size := 13; // tamaño de texto WLabel1.Font.Style := [fsBold]; WLabel1.Font.Color:= clWhite; // color de texto WLabel1.ShowAccelChar := False; WLabel1.Caption := WizardForm.WelcomeLabel1.Caption; WLabel1.Transparent := True; WLabel1.Parent := WizardForm.WelcomePage; WLabel2 :=TLabel.Create(WizardForm); WLabel2.Top := ScaleY(110); WLabel2.Left := ScaleX(40); // mover el titulo de abajo (menor izq o mayor der) WLabel2.Width := ScaleX(301); // ancho del cuadro de texto abajo WLabel2.Height := ScaleY(300); // altura del cuadro de texto de abajo WLabel2.AutoSize := False; WLabel2.WordWrap := True; WLabel2.Font.Name := 'arial'; // nombre del font WLabel2.Font.Color:= clWhite; // color de texto WLabel2.ShowAccelChar := False; WLabel2.Caption := WizardForm.WelcomeLabel2.Caption; WLabel2.Transparent := True; WLabel2.Parent := WizardForm.WelcomePage; WizardForm.WizardBitmapImage2.Width := 500; // tamaño de imagen final ancho WizardForm.WizardBitmapImage2.Height := 315; // tamaño de imagen final altura FLabel1 := TLabel.Create(WizardForm); // PAGINA FINAL.. FLabel1.Left := ScaleX(40); // mover el titulo de arriba (menor izq o mayor der) FLabel1.Top := ScaleY(100); FLabel1.Width := ScaleX(301); // ancho del cuadro de texto arriba FLabel1.Height := ScaleY(75); // altura del cuadro de texto de arriba FLabel1.AutoSize := False; FLabel1.WordWrap := True; FLabel1.Font.Name := 'arial'; // nombre del font FLabel1.Font.Size := 16; // tamaño de texto FLabel1.Font.Style := [fsBold]; FLabel1.Font.Color:= clWhite; // color de texto FLabel1.ShowAccelChar := False; FLabel1.Caption := WizardForm.FinishedHeadingLabel.Caption; FLabel1.Transparent := True; FLabel1.Parent := WizardForm.FinishedPage; FLabel2 :=TLabel.Create(WizardForm); FLabel2.Top := ScaleY(110); FLabel2.Left := ScaleX(40); // mover el titulo de abajo (menor izq o mayor der) FLabel2.Width := ScaleX(301); // ancho del cuadro de texto abajo FLabel2.Height := ScaleY(300); // altura del cuadro de texto de abajo FLabel2.AutoSize := False; FLabel2.WordWrap := True; FLabel2.Font.Name := 'arial'; // nombre del font FLabel2.Font.Color:= clWhite; // color de texto FLabel2.ShowAccelChar := False; FLabel2.Caption := WizardForm.FinishedLabel.Caption; FLabel2.Transparent := True; FLabel2.Parent := WizardForm.FinishedPage; end; [Setup] ; --- Dispatching code ------------------------------------------------------------ [Code] function NextButtonClick(CurPageID: Integer): Boolean; begin Result := NextButtonClick1(CurPageID); if not Result then exit; Result := NextButtonClick8(CurPageID); if not Result then exit; end; procedure InitializeWizard(); begin InitializeWizard2(); InitializeWizard3(); InitializeWizard4(); InitializeWizard6(); InitializeWizard7(); InitializeWizard8(); end; procedure DeinitializeSetup(); begin DeinitializeSetup5(); end; function InitializeSetup(): Boolean; begin Result := InitializeSetup5(); if not Result then exit; end; procedure CurPageChanged(CurPageID: Integer); begin CurPageChanged7(CurPageID); end; function GetCustomSetupExitCode(): Integer; begin Result := GetCustomSetupExitCode8(); if Result>0 then exit; end; [Registry] Root: HKCU; SubKey: {app}\XXXTeam; ValueType: string; ValueName: InstallPath; Root: HKCU; SubKey: {app}\XXXTeam; ValueType: string; ValueName: Version; [Ini] Filename: "rev.ini"; Section: Emulator; Key: Language; Filename: "rev.ini"; Section: steamclient; Key: PlayerName;
If you put the lines from the [Languages] section into a separate file (in this case the c:\Languages.txt), the following preprocessor script will generate the script that will add to the combo box placed on a custom page list of available languages and select the current one. On that custom page will also be the edit box for entering player's name. The name of the language along with the entered name will then be stored in the Setup.ini file into a selected application directory. The preprocessed script is saved as c:\PreprocessedScript.iss file. Languages.txt content: Note, that each item in the Languages.txt file must have the exact format: the name and language file (path) must be enclosed by the "" chars the file (path) must contain only one file (you cannot use delimited list of files) Name: "default"; MessagesFile: "compiler:Default.isl" Name: "catalan"; MessagesFile: "compiler:Languages\Catalan.isl" Name: "french"; MessagesFile: "compiler:Languages\French.isl" Name: "german"; MessagesFile: "compiler:Languages\German.isl" Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl" Name: "portuguese"; MessagesFile: "compiler:Languages\Portuguese.isl" Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl" Script file: The ConvertLanguageName function is borrowed (and modified) from the InnoSetup source... #define LanguageFile "c:\Languages.txt" #define LanguageName #define LanguageIndex #define LanguageCount #define FileLine #define FileHandle #dim LanguageList[65536] #sub ProcessFileLine #if FileLine != "" #expr LanguageList[LanguageCount] = FileLine #expr LanguageCount = ++LanguageCount #endif #endsub #for {FileHandle = FileOpen(LanguageFile); \ FileHandle && !FileEof(FileHandle); \ FileLine = FileRead(FileHandle)} \ ProcessFileLine #if FileHandle #expr FileClose(FileHandle) #endif [Setup] AppName=My Program AppVersion=1.5 DefaultDirName={pf}\My Program [Languages] #sub AddLanguageItemSection #emit LanguageList[LanguageIndex] #endsub #for {LanguageIndex = 0; LanguageIndex < LanguageCount; LanguageIndex++} AddLanguageItemSection [INI] Filename: "{app}\Setup.ini"; Section: "Emulator"; Key: "Language"; String: "{code:GetLanguageName}"; Flags: createkeyifdoesntexist Filename: "{app}\Setup.ini"; Section: "SteamClient"; Key: "PlayerName"; String: "{code:GetPlayerName}"; Flags: createkeyifdoesntexist [Code] var NameEdit: TNewEdit; LanguageCombo: TNewComboBox; LanguageNames: TStringList; function ConvertLanguageName(const Value: string): string; var I: Integer; WideCharCode: Word; begin Result := ''; I := 1; while I <= Length(Value) do begin if Value[I] = '<' then begin WideCharCode := StrToInt('$' + Copy(Value, I + 1, 4)); I := I + 6; end else begin WideCharCode := Ord(Value[I]); I := I + 1; end; SetLength(Result, Length(Result) + 1); Result[Length(Result)] := Chr(WideCharCode); end; end; function GetLanguageName(const Value: string): string; begin Result := LanguageNames[LanguageCombo.ItemIndex]; end; function GetPlayerName(const Value: string): string; begin Result := NameEdit.Text; end; procedure InitializeWizard; var PlayerSettingsPage: TWizardPage; NameLabel: TLabel; LanguageLabel: TLabel; begin PlayerSettingsPage := CreateCustomPage(wpWelcome, 'Caption', 'Description'); NameLabel := TLabel.Create(WizardForm); NameLabel.Parent := PlayerSettingsPage.Surface; NameLabel.Left := 0; NameLabel.Top := 0; NameLabel.Caption := 'Name'; NameEdit := TNewEdit.Create(WizardForm); NameEdit.Parent := PlayerSettingsPage.Surface; NameEdit.Left := 0; NameEdit.Top := NameLabel.Top + NameLabel.Height + 4; NameEdit.Width := 250; LanguageNames := TStringList.Create; #sub AddLanguageInternalNames #define GetLanguageInternalName(str S) \ Local[0] = Copy(S, Pos("Name:", S) + Len("Name:")), \ Local[1] = Copy(Local[0], Pos("""", Local[0]) + 1), \ Copy(Local[1], 1, Pos("""", Local[1]) - 1) #emit ' LanguageNames.Add(''' + GetLanguageInternalName(LanguageList[LanguageIndex]) + ''');' #endsub #for {LanguageIndex = 0; LanguageIndex < LanguageCount; LanguageIndex++} AddLanguageInternalNames LanguageLabel := TLabel.Create(WizardForm); LanguageLabel.Parent := PlayerSettingsPage.Surface; LanguageLabel.Left := 0; LanguageLabel.Top := NameEdit.Top + NameEdit.Height + 8; LanguageLabel.Caption := 'Language'; LanguageCombo := TNewComboBox.Create(WizardForm); LanguageCombo.Parent := PlayerSettingsPage.Surface; LanguageCombo.Left := 0; LanguageCombo.Top := LanguageLabel.Top + LanguageLabel.Height + 4; LanguageCombo.Width := NameEdit.Width; LanguageCombo.Style := csDropDownList; #sub AddLanguageDisplayNames #define GetLanguageDisplayName(str S) \ ReadIni(S, "LangOptions", "LanguageName") #define GetLanguageFile(str S) \ Local[0] = Copy(S, Pos("MessagesFile:", S) + Len("MessagesFile:")), \ Local[1] = Copy(Local[0], Pos("""", Local[0]) + 1), \ StringChange(Copy(Local[1], 1, Pos("""", Local[1]) - 1), "compiler:", CompilerPath) #expr LanguageName = GetLanguageDisplayName(GetLanguageFile(LanguageList[LanguageIndex])) #emit ' LanguageCombo.Items.Add(ConvertLanguageName(''' + LanguageName + '''));' #endsub #for {LanguageIndex = 0; LanguageIndex < LanguageCount; LanguageIndex++} AddLanguageDisplayNames LanguageCombo.ItemIndex := LanguageNames.IndexOf(ActiveLanguage); end; procedure DeinitializeSetup; begin LanguageNames.Free; end; #expr SaveToFile("c:\PreprocessedScript.iss")