I built a program in pascal using FPC but after this I installed lazarus. So now I'm editing this same pascal program in Lazarus.
It works very well to insert, modify and list: name, surname and telephone in a array of record of this type.
But the read command is not working for me in this modify procedure.
But the read command works well on my Delete procedure for example.
Main problem:
**These 3 read command did not work so I modified to readln which fixed it for me and now each one reads my inputs but only with readln, but not with read. **
But why ?
gotoxy(24,8);
read(modificar_nome);
gotoxy(24,9);
read(modificar_sobrenome);
gotoxy(24,10);
read(modificar_telefone);
Complete Procedure
//---------------------------------------
// MODIFICAR escolha
//---------------------------------------
procedure modificar_pessoa(var pessoa: type_pessoas);
var i,achou: integer;
var buscar_pessoa, modificar_nome, modificar_sobrenome, modificar_telefone: string;
begin
clrscr;
writeln('****************************************************************************************');
writeln('* Modificar pessoa *');
writeln('****************************************************************************************');
writeln('* Nome: *');
writeln('****************************************************************************************');
gotoxy(9,4); readln(buscar_pessoa);
for i:=0 to length(pessoa)-1 do
begin
if (pessoa[i].primeiro_nome = buscar_pessoa) then
begin
achou := 1;
break;
end;
end;
if achou = 1 then
begin
writeln('****************************************************************************************');
writeln('* Preencher so o que deseja modificar (ou ENTER para ignorar): *');
writeln('****************************************************************************************');
writeln('* Novo Primeiro Nome? *');
writeln('* Novo Sobrenome? *');
writeln('* Novo Telefone? *');
writeln('****************************************************************************************');
gotoxy(24,8);
read(modificar_nome); // not waiting for my input ???????????
gotoxy(24,9);
read(modificar_sobrenome);
gotoxy(24,10);
read(modificar_telefone);
if modificar_nome <> '' then
pessoa[i].primeiro_nome := modificar_nome;
if modificar_sobrenome <> '' then
pessoa[i].ultimo_nome := modificar_sobrenome;
if modificar_telefone <> '' then
pessoa[i].telefone := modificar_telefone;
gotoxy(1,13);
writeln;
writeln('Pessoa ''', buscar_pessoa, ''' modificada com sucesso!');
end
else
begin
gotoxy(1,13);
writeln;
writeln('ERRO: Pessoa ''', buscar_pessoa, ''' não foi localizada!');
end;
writeln;
writeln('Pressione qualquer tecla para retornar ao menu...'); ReadAnyKey;
end;
Funny is this other procedure to delete (exclude) people, the read command works fine and waits for my input
//---------------------------------------
// EXCLUIR escolha
//---------------------------------------
procedure excluir_pessoa(var pessoa: type_pessoas);
var i,achou: integer;
var del_pessoa: string;
begin
clrscr;
writeln('****************************************************************************************');
writeln('* Excluir pessoa *');
writeln('****************************************************************************************');
writeln('* Nome: *');
writeln('****************************************************************************************');
gotoxy(9,4); read(del_pessoa);
for i:=0 to length(pessoa)-1 do
begin
if (pessoa[i].primeiro_nome = del_pessoa) then
begin
achou := 1;
pessoa[i].primeiro_nome := '';
pessoa[i].ultimo_nome := '';
pessoa[i].telefone := '';
break;
end;
end;
gotoxy(1,6);
if achou = 1 then
writeln('Pessoa ''', del_pessoa, ''' excluida com sucesso!')
else
writeln('ERRO: Pessoa ''', del_pessoa, ''' nao foi localizada!');
writeln;
writeln('Pressione qualquer tecla para retornar ao menu...'); ReadAnyKey;
end;
I think that the short answer to this is that your observation is correct and that the reason is that Read is working as designed. Once FPC's runtime has executed the firstRead it behaves as if it has seen an Eol after what the user typed, and therefore the second and subsequent calls to Read return immediately without waiting for any further user input.
The reason it behaves this was seems to be historical. FPC was based on the Object Pascal of the commercial RAD system Delphi, and although the two have diverged somewhat over the years (e.g. in their different implementations of generics), FPC faithfully reproduces many of the basic details of the Object Pascal language and runtime, including its file handling, of which keyboard input is a special case.
I think that it is legitimate. therefore, to look at the Delphi/Object Pasval documentation of Read. In the online help of Delphi 7, which dates from 20 years ago, the section on Read includes
Description
The Read procedure can be used in Delphi code in the following ways.
For typed files, it reads a file component into a variable.
For text files, it reads one or more values into one or more variables.
With a type string variable:
Read reads all characters up to, but not including, the next end-of-line marker or until Eof(F) becomes true; it does not skip to the next line after reading. If the resulting string is longer than the maximum length of the string variable, it is truncated.
After the first Read, each subsequent Read sees the end-of-line marker and returns a zero-length string.
Use multiple Readln calls to read successive string values.[emphasis added]
So, the Delphi OLH documents exactly the behaviour you are seeing (that the second and subsequent calls to Read return immediately without gathering any user input) and describes the remedy, which is to use Readln instead. And that's why you see the same behaviour + remedy in FPC.
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.
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")