AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-12597

Ian Boyd's questions

Martin Hope
Ian Boyd
Asked: 2024-11-23 15:32:15 +0800 CST

Uma resourcestring é uma string ou um registro e preciso usar LoadResString para carregá-la?

  • 11

Na unidade Vcl.Buttons do Delphi eles chamam:

Caption := LoadResString(BitBtnCaptions[Value]);

Onde BitnBtnCaptionsestá uma matriz como:

BitnBtnCaptions: array[TBitBtnKind] of Pointer = (
        nil, @SOKButton, @SCancelButton, @SHelpButton, @SYesButton, @SNoButton,
        @SCloseButton, @SAbortButton, @SRetryButton, @SIgnoreButton,
        @SAllButton);

E as BitnBtnCaptionsconstantes são:

resourcestring
  SOKButton = 'OK';
  SCancelButton = 'Cancel';
  SYesButton = '&Yes';
  SNoButton = '&No';
  SHelpButton = '&Help';
  SCloseButton = '&Close';
  SIgnoreButton = '&Ignore';
  SRetryButton = '&Retry';
  SAbortButton = 'Abort';
  SAllButton = '&All';

Então, basicamente, ele está chamando:

resourcestring
  SOKButton = 'OK';

s := LoadResString(@SOKButton);

A declaração de LoadResString é:

function LoadResString(ResStringRec: PResStringRec): string;

Esta função requer um ponteiro para um TResStringRec :

PResStringRec = ^TResStringRec;
TResStringRec = packed record
   // 32bit = 8 bytes
   // 64bit = 16 bytes
   Module: ^HMODULE;
   Identifier: NativeUint;
end;

Mas estamos passando uma resourcestring .

Isso significa que estamos passando uma string para uma função que só aceita um PResStringRec em caso de erro?

Por que você pergunta?

Pergunto porque estou chamando:

Result := LoadResString(@SMsgDlgOK);

e com avaliação de ponteiro digitado ( ie {$T+} ou {$TYPEDADDRESS ON}) ele emite um aviso de tipo incompatível:

E2010 Tipos incompatíveis: 'PResStringRec' e 'Pointer'

E é claro que eu posso simplesmente forçar com um elenco forte:

Result := LoadResString(PResStringRec(@SMsgDlgOK));

Elenco difícil?

Mas isso parece um pouco duro para algo que supostamente é a maneira correta de fazer algo. Cheira um pouco estranho.

E o pior é que se estou fazendo um gesso forte , é melhor saber o que estou fazendo.

E do jeito que eu vejo, a única maneira de isso funcionar é se:

  • a constante mágicaSMsgDlgOk
  • na verdade é um TResStringRec.

Não queremos forçar uma peça triangular no furo quadrado , usando um molde rígido às cegas.

O que me leva à minha pergunta: uma resourcestring

resourcestring
  SMsgDlgOK = 'OK';

uma string? Ou é um registro?

Mas eu realmente tenho que fazer isso?

Eu preciso realmente fazer o que ele Vcl.Buttonsfaz? Vcl.ButtonsPrecisa fazer o que ele está fazendo?

Não podemos simplesmente substituir:

s := LoadResString(@SOKButton);

com

s := SOKButton

Não era esse o ponto principal da palavra-chave resourcestring ? Ela coloca as strings na tabela strings (onde os localizadores podem localizá-las) e faz toda a mágica em tempo de execução (ou seja, LoadResString ) para expor as resourcestrings como strings ?

E se isso não for verdade: por que não?

  • O que é resourcestring?
  • e como ele difere de LoadResString(resourceString)?

O que ganho ligando para:

LoadResString(@SOKButton)

sobre apenas usar SOKButton ?

E se eu tiver que usar LoadResString , é realmente , realmente , verdadeiramente , juro, 100% seguro forçar o typecast?

  • Ideal :s := SOKButton
  • Atual : s := LoadResString(@SOKButton)// falha na verificação de ponteiro digitado
  • Correto (?) :s := LoadResString(PResStringRec(@SOKButton))

Bate-papo bônus

Se um resourcestring realmente for um TResStringRect, então eu deveria ser capaz de vê-lo. Então eu inspeciono o que eles são:

╔════════════════════════════╤══════════╗
║ Watch Name                 │ Value    ║
╠════════════════════════════╪══════════╣
║ PResStringRec(@SMsgDlgOK)  │ $AD3C54  ║
║ ├──Module                  │ $400000  ║
║ ╰──Identifier              │ 0        ║
╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┼┈┈┈┈┈┈┈┈┈┈╢
║ PResStringRec(@SMsgDlgYes) │ $AD3C54  ║
║ ├──Module                  │ $400000  ║
║ ╰──Identifier              │ 0        ║
╟┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┼┈┈┈┈┈┈┈┈┈┈╢
║ PResStringRec(@SMsgDlgNo)  │ $AD3C54  ║
║ ├──Module                  │ $400000  ║
║ ╰──Identifier              │ 0        ║
╚════════════════════════════╧══════════╝

Cada sequência de recursos:

  • mora no mesmo endereço
  • tem o mesmo módulo
  • tem o mesmo identificador

Então algo não está certo; não parece um disco para mim.

Então por que o código funciona Vcl.Buttons?

delphi
  • 1 respostas
  • 102 Views
Martin Hope
Ian Boyd
Asked: 2024-04-11 21:45:55 +0800 CST

Como criar um ComboBox em HTML?

  • 4

Versão curta

Como posso fazer um ComboBox em HTML?

Versão longa

Como posso criar um menu suspenso editável com texto padrão em HTML?

O que quer dizer:

  • uma caixa de texto que o usuário pode digitar
  • ou eles podem clicar em (ou Alt+ Down) para exibir um menu suspenso
  • e selecione algum texto predefinido
  • enquanto o padrão da caixa de texto é algum padrão útil que não aparece (necessariamente) na lista

Algo como o controle padrão do Windows Combo Box ou o WinForms ComboBox :

insira a descrição da imagem aqui

Esforço de Pesquisa

Eu tentei o seguinte HTML:

<input id="edPhrase" list="phrases" value="Hello, world!">
<datalist id="phrases">
  <option value="Good morning Vietnam">Good morning Vietnam</option>
  <option value="Stay classy San Francisco">Stay classy San Francisco</option>
  <option value="Cleaveland Rocks">Cleaveland Rocks</option>
  <option value="I see dead people">I see dead people</option>
  <option value="Guess who's drunk">Guess who's drunk</option>
</datalist>

mas nenhum menu suspenso aparece:

insira a descrição da imagem aqui

Se o usuário excluir o texto existente, o menu suspenso aparecerá:

insira a descrição da imagem aqui

Derrotando assim todo o propósito de um menu suspenso.

O que nos leva à pergunta:

Como posso fazer um ComboBox em HTML?

Exemplo Mínimo Reprodutível Completo (CRME)

Então você pode tentar mexer nele para que funcione em sua sandbox:

  • jsFiddle: 7t1zgqo6
html
  • 2 respostas
  • 39 Views
Martin Hope
Ian Boyd
Asked: 2024-01-19 02:07:40 +0800 CST

O que significa o argumento input_shape para Flatten()?

  • 7

Estou acompanhando o tutorial do Tensorflow para iniciantes:

  • https://www.tensorflow.org/tutorials/quickstart/beginner

E chegamos à nossa primeira linha de código:

Crie um modelo de aprendizado de máquina

Construa um modelo tf.keras.Sequential:

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10)
])

E estou confuso com a primeira linha:

tf.keras.layers.Flatten(input_shape=(28, 28))

Especificamente sobre o input_shapeargumento.

Por quê : porque pensei que a Flattenoperação pegava a camada anterior e a transformava em um vetor 1-d; então o que o input_shapeargumento significa?

Então consultamos a documentação

A documentação em Flatten(): https://www.tensorflow.org/api_docs/python/tf/keras/layers/Flatten

diz:

Achata a entrada. Não afeta o tamanho do lote.

E especificamente estou interessado no input_shapeargumento:

Argumentos

data_formatUma string, um de channels_last(padrão) ou channels_first. A ordenação das dimensões nas entradas. canais_último corresponde a entradas com formato ( batch, ..., channels) enquanto canais_primeiro corresponde a entradas com formato ( batch, channels, ...). Quando não especificado, usa image_data_formato valor encontrado no arquivo de configuração do Keras em ~/.keras/keras.json(se existir) else 'channels_last'. O padrão é 'canais_último'.

Não há argumento chamado input_shape.

Então, o que o argumento significa?

Versão curta

  • Se eu estivesse escrevendo código TF a partir da documentação, como saberia que isso Flattenleva a um input_shapeargumento?
  • Por que o input_shapeargumento é omitido da documentação?

Em outras palavras: deve haver algum conhecimento básico sobre o TensorFlow que a documentação pressupõe que você tenha, mas não se documenta.

Alguém pode me ajudar a entender esse comportamento indocumentado e por que ele não está documentado?

Esforço de Pesquisa

Além de consultar a documentação, temos:

  • Explicação de entrada Keras: input_shape, unidades, batch_size, dim, etc (não é minha pergunta, nem responde minha pergunta)
tensorflow
  • 1 respostas
  • 21 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve