PBToolboxAI v1 ← Site

picture — u_pbt_picture #

← Referência dos componentes · Índice do guia

Apresentação de imagem: todos os formatos correntes, modos de enquadramento, alinhamento, acinzentamento automático e emblema de contador.

Ver ao vivo — Aplicação de demonstração, mosaico Picture: a pré-visualização, o código que o produz e esta página, lado a lado.


Em resumo #

Userobjectu_pbt_picture
Classe de items— (componente sem items)
Serve paraSubstituir um picture do PowerBuilder: formatos modernos (SVG, WebP, GIF animado), enquadramento controlado, imagem clicável, acinzentamento automático
Opções opt-inib_track_mouse

Início rápido #

// event open da janela
uo_image.is_source  = "img\logo.png"
uo_image.is_stretch = uo_image.STRETCH_UNIFORM   // adapta sem deformar
uo_image.is_align   = uo_image.ALIGN_CENTER
uo_image.is_tooltip = "Logotipo da empresa"

De onde vem a imagem: is_source #

is_source aceita quatro formas, todas permutáveis:

FormaExemploUtilização
Ficheiro localimg\logo.pngpng, jpg, bmp, gif, ico, svg, webp
Endereço webhttps://…/logo.pngImagem carregada a partir de um servidor (http ou https)
Dados incorporadosdata:image/png;base64,…Imagem já em memória, sem ficheiro intermédio
Recurso de DLLimg\packimages.dll:SAMPLEImagem empacotada numa DLL de recursos

Pode colocar-se um prefixo anim: à frente de um GIF para assinalar explicitamente uma animação (os GIF animam-se de qualquer forma).

Quando o mesmo nome existe sob vários tipos de recurso numa DLL, deve indicar-se o tipo: img\packimages.dll:PNG/SAMPLE, SVG/SAMPLE, ICON/APP, RCDATA/BLOB. Ver As imagens e os ícones para os prefixos mono: e tint:, que recolorem um glifo consoante o tema.


Como é enquadrada: is_stretch #

ConstanteEfeito
STRETCH_UNIFORMPredefinição. A imagem é redimensionada sem deformação, totalmente visível; podem surgir margens
STRETCH_UNIFORMTOFILLRedimensionamento sem deformação, mas a moldura é totalmente preenchida; o que excede é recortado
STRETCH_FILLA imagem é esticada para ocupar exatamente a moldura — pode ficar deformada
STRETCH_NONETamanho original, sem redimensionamento

is_align decide a posição horizontal da imagem quando esta é mais pequena do que o controlo: ALIGN_CENTER (predefinição), ALIGN_START, ALIGN_END. O eixo vertical tem a sua própria propriedade, is_valign.


Constantes #

ConstanteValorPara
STRETCH_NONE · STRETCH_FILL · STRETCH_UNIFORM · STRETCH_UNIFORMTOFILL"none" "fill" "uniform" "uniformtofill"is_stretch
ALIGN_CENTER · ALIGN_START · ALIGN_END"center" "start" "end"is_align
VALIGN_TOP · VALIGN_CENTER · VALIGN_BOTTOM"top" "center" "bottom"is_valign
is_valignstringVALIGN_CENTERColocação vertical quando a imagem é mais pequena do que o controlo: VALIGN_TOP, VALIGN_CENTER, VALIGN_BOTTOM. Os dois eixos são independentes — is_align dá a coluna, este a linha — e é isso que torna um canto alcançável
ROTATION_NONE · ROTATION_90 · ROTATION_180 · ROTATION_2700 90 180 270ii_rotation

ALIGN_START e ALIGN_END são lógicos: seguem o sentido de escrita (Idioma e RTL). Os valores físicos left e right continuam a ser aceites como sinónimos.


Propriedades #

PropriedadeTipoPredefiniçãoFunção
is_sourcestring""A imagem a apresentar (ver as quatro formas acima)
is_stretchstring"uniform"Modo de enquadramento: STRETCH_NONE, STRETCH_FILL, STRETCH_UNIFORM, STRETCH_UNIFORMTOFILL
is_alignstring"center"Posicionamento horizontal quando a imagem é menor do que o controlo: ALIGN_CENTER, ALIGN_START, ALIGN_END. O eixo vertical é is_valign
ib_enabledbooleantrueA false, a imagem é apresentada em tons de cinzento
ii_badgeinteger0Emblema de contador no canto superior direito (0 = nenhum)
il_badge_colorlong0Fundo do emblema, em RGB do PowerBuilder (0 = a cor que vem do tema). A cor do texto é escolhida automaticamente para que o contador continue legível
ii_badge_sizeinteger0Altura do emblema em píxeis (0 = o tamanho que vem do tema). O tamanho da letra acompanha sozinho: o contador continua centrado seja qual for a dimensão
ib_track_mousebooleanfalseOpt-in: ativa ue_mouse_enter / ue_mouse_leave
is_placeholderstring""Imagem de espera, apresentada enquanto is_source estiver vazia (uma moldura « adicionar uma fotografia », uma silhueta). Apresentada esbatida: um substituto não é o conteúdo e nunca é anunciado como imagem carregada. Aceita o prefixo mono:, que recolore um glifo monocromático com o tema
is_error_sourcestring""Imagem de recurso quando a origem falha o carregamento. Deixe-a vazia e o componente apresenta o seu próprio glifo de erro — nunca uma caixa vazia, que não diz nada ao utilizador enquanto ue_error só vai para o seu código. Aceita o prefixo mono:
ii_rotationinteger0Quartos de volta, para as digitalizações e fotografias que chegam deitadas: ROTATION_NONE, ROTATION_90, ROTATION_180, ROTATION_270 (qualquer outro valor vale 0). Um quarto de volta troca também os eixos de ajuste, pelo que a imagem mantém as proporções em vez de ser esmagada
ib_mirrorbooleanfalseEspelho horizontal, aplicado por cima da rotação
ib_zoomablebooleanfalseOpt-in: o utilizador pode aproximar-se (roda), deslocar-se (arrastar) e voltar ao enquadramento (duplo clique). Para uma planta, uma digitalização, uma fotografia — onde quatro modos de ajuste fixos não chegam
id_zoomdouble1.0Fator de zoom: 1.0 = a imagem inteira cabe, até 8.0. Ao relê-lo obtém o fator atual, roda incluída (ue_zoom_changed avisa a cada passo). Requer ib_zoomable
ib_allow_dropbooleanfalseOpt-in: aceita ficheiros largados a partir do Explorador do Windows. A moldura mostra que está armada, e os caminhos completos chegam por ue_drop_files — carregá-los em is_source cabe à sua aplicação
ib_auto_heightbooleanfalseOpt-in: o userobject assume a altura que respeita as proporções da imagem à largura atual. Para uma imagem essa altura deduz-se: não é preciso calculá-la a partir das dimensões de ue_loaded
is_theme_stylestringfluentEstilo visual do componente (constantes THEME_STYLE_*)
is_theme_modestringlightVariante clara ou escura (constantes THEME_MODE_*)
il_theme_accentlong-1Cor de destaque deste componente (-1 = destaque do tema)
is_tooltipstring""Tooltip simples apresentado ao passar sobre o componente
is_super_tooltip_titlestring""Título do tooltip enriquecido (prevalece sobre is_tooltip)
is_super_tooltip_textstring""Texto do tooltip enriquecido (aceita marcação enriquecida)
is_super_tooltip_imagestring""Imagem do tooltip enriquecido

Métodos #

MétodoFunção
of_reset ( )Repõe todas as propriedades nos respetivos valores predefinidos e retira a imagem
of_set_redraw (boolean)Agrupa uma sequência de modificações numa única representação
of_save_as_png (string) · of_save_as_jpg (string)Exporta a representação como imagem

Eventos #

EventoAcionado quando
ue_clicked ( )Clique esquerdo na imagem
ue_loaded (long al_width, long al_height)A imagem foi carregada; os parâmetros contêm as suas dimensões de origem em pixels
ue_error (string as_message)A imagem não pôde ser carregada (ficheiro inexistente, endereço inacessível, formato recusado)
ue_rclicked ( )Clique direito na imagem
ue_double_clicked ( )Duplo clique na imagem. Os cliques simples que o precedem também são emitidos, pela mesma ordem. Quando ib_zoomable está ativo, o duplo clique também repõe o enquadramento: o evento é emitido nos dois casos, e o significado é seu
ue_zoom_changed (double ad_zoom)O fator de zoom mudou, quer pela roda quer por id_zoom. 1.0 significa que a imagem inteira volta a caber
ue_auto_height (long al_height)O componente fixou-se numa nova altura; o userobject foi redimensionado quando o evento é emitido. Requer ib_auto_height
ue_drop_files (string as_files[])Ficheiros largados a partir do Explorador: caminhos completos, uma entrada por ficheiro. Requer ib_allow_drop
ue_drag_enter ( )Um arrastamento de ficheiros entrou no componente (ib_allow_drop)
ue_drag_leave ( )O arrastamento de ficheiros saiu do componente
ue_mouse_enter ( )O rato entra — requer ib_track_mouse = true
ue_mouse_leave ( )O rato sai — requer ib_track_mouse = true
ue_ready ( )O componente terminou o carregamento; tudo o que foi enviado antes foi reproduzido
ue_runtime_missing ( )O runtime WebView2 está ausente: o componente permanece vazio
ue_bg_color (long al_color)O componente calculou a cor de fundo do respetivo tema; o userobject já a adotou (backcolor)

Exemplos #

Apresentar a fotografia de uma ficha #

// event ue_row_changed do datawindow : apresentar a fotografia do cliente atual
uo_photo.is_source  = "photos\" + ls_code_client + ".jpg"
uo_photo.is_stretch = uo_photo.STRETCH_UNIFORMTOFILL   // preenche a moldura, o excedente e recortado
uo_photo.is_align   = uo_photo.ALIGN_CENTER
// event ue_error de uo_photo : (string as_message)
uo_photo.is_source = "img\photo_absente.svg"     // imagem de substituicao

Tratar ue_error é a forma correta de gerir uma fotografia em falta: é escusado testar a existência do ficheiro antes de o atribuir.

Uma imagem clicável, à maneira de um botão #

uo_avatar.is_source    = "photos\utilisateur.png"
uo_avatar.is_tooltip   = "A minha conta"
// event ue_clicked de uo_avatar
of_ouvrir_mon_compte()

Contador e acinzentamento #

// Um emblema de notificacoes num icone de correio
uo_messagerie.is_source = "img\packimages.dll:SVG/MAIL"
uo_messagerie.ii_badge  = ll_non_lus       // 0 faz desaparecer o emblema

// Emblema vermelho acima de um limiar, cor do tema caso contrario (0)
if ll_non_lus > 20 then
    uo_messagerie.il_badge_color = RGB(200, 30, 30)
else
    uo_messagerie.il_badge_color = 0
end if

// Funcionalidade indisponivel : a imagem passa a tons de cinzento, sem outra imagem a fornecer
uo_messagerie.ib_enabled = ib_droit_messagerie

O acinzentamento é calculado automaticamente: não é necessário fornecer uma segunda imagem «desativada».

Conhecer as dimensões reais da imagem #

uo_apercu.is_source = ls_fichier_choisi
// event ue_loaded de uo_apercu : (long al_width, long al_height)
uo_statut.of_item("main").is_text = String(al_width) + " x " + String(al_height) + " px"

// Uma imagem mais pequena do que a moldura : nao a ampliar inutilmente
if al_width < uo_apercu.width and al_height < uo_apercu.height then
    uo_apercu.is_stretch = uo_apercu.STRETCH_NONE
end if

Um banner de largura total #

uo_banniere.is_source  = "img\banniere.jpg"
uo_banniere.is_stretch = uo_banniere.STRETCH_UNIFORMTOFILL   // preenche toda a faixa, sem deformar
uo_banniere.is_valign   = uo_banniere.VALIGN_TOP               // mantem o topo da imagem visivel

Boas práticas #


← Referência dos componentes · Índice do guia