Uma coleção de componentes VCL/LCL para Delphi 2009 - 11.0 Alexandria e Lazarus
O JPPACK é uma pequena coleção de componentes VCL para componentes Delphi e LCL para Lázaro e CoDETYPHON.
Versões Delphi suportadas: 2009 , 2010 , XE , XE2 , XE3 , XE4 , XE5 , XE6 , XE7 , XE8 , 10.0 Seattle , 10.1 Berlin , 10.2 Tóquio , 10.3 Rio , 10.4 Sydney , 11.0 Alexandria .
Lázaro : versão FPC necessária 3.0.4 3.2.0 ou mais recente (testado em Lazarus 2.0.10 + FPC 3.2.0, Lazarus 2.2.0 + FPC 3.2.2 e Lazarus 2.2.2 + FPC 3.2.2). CODETYPHON : Testado no CoDETYPHON 7.7 R2202141933 com FPC 3.3.1 R2202141933

Esses componentes foram criados dentro de alguns anos, foram modificados repetidamente, melhorados e estendidos com as funções necessárias na implementação de projetos específicos. Geralmente, há um pequeno caos, mas acho que tudo funciona bem (espero!).
Não sou especialista em escrever componentes VCL e me ajudei analisando os códigos de origem (e usando fragmentos) de vários componentes Delphi gratuitos, especialmente componentes da Cindy e PNGComponents.
Algumas das funções e procedimentos relacionados ao processamento de gráficos foram retirados dos componentes Cindy . As rotinas relacionadas ao gradiente foram quase inteiramente retiradas deste pacote (arquivo VCL.cyGraphics.pas ).
O autor do componente Cindy S é Júlio Maurício Antunes Piao. As fontes estão disponíveis em https://sourceforge.net/projects/tcycomponents/ nos arquivos de origem nos quais uso funções escritas por Júlio, adicionei informações relevantes com um link para sua página.
Depois de batalhas longas e ferozes com vários botões de diferentes pacotes de componentes para Delphi (comercial e gratuito), finalmente encontrei aqueles que exibem os arquivos PNG corretamente - tpngbitbtn e tpngspeedbutton do pacote PNGComponents . Nunca tive problemas com eles, ao contrário de muitos, muitos outros. Por esse motivo, na implementação dos meus botões, decidi confiar no código deste pacote.
O autor original do pacote PNGComponents é Martijn Saly ( www.thany.org ). O projeto é atualmente mantido pela UWE Raabe. Fontes estão disponíveis em https://github.com/uweraabe/pngcomponents
Na pasta 3ª parte, você pode encontrar o arquivo zip com o PNGComponents ver. 1.4.1. Esta é a versão mais recente do PNGComponents disponível ao escrever este documento e funciona bem com o JPPack .
2020.08.31 - A versão do GitHub também funciona bem.
Cada componente visual no pacote jppack suporta a ancoragem de componentes externos usando a propriedade AnchoredControls .
Você pode ancorar componentes externos em qualquer borda. Quando você altera o tamanho ou a posição do componente principal, a posição dos componentes ancorados será atualizada automaticamente.

A maioria dos componentes no pacote jppack possui a propriedade TagExt . Aqui você pode armazenar um valor inteiro ( IntValue ), string ( StrValue ), número de flutuação ( RealValue ), ponteiro ( PointerValue ) e data ( DateValue ). Os três primeiros valores estão disponíveis no inspetor de objeto e no código, os dois últimos - apenas no código.
Valores padrão:
| Propriedade | Valor padrão |
|---|---|
TagExt.IntValue | 0 |
TagExt.StrValue | '' (string vazia) |
TagExt.RealValue | 0 |
TagExt.PointerValue | nil |
TagExt.DateValue | Now |
Um painel altamente personalizável. Descendente de TCustomPanel . Foi escrito com base em um dos painéis incluídos no pacote de componentes Cindy (mas não me lembro exatamente qual).

O painel é dividido em duas partes - superior e inferior. Para cada um deles, você pode definir cores (gradiente ou sólido) separadamente.
Todas as fronteiras do painel são configuradas separadamente. Você pode definir diferentes cores, espessura, estilo, visibilidade para cada borda.
O painel possui um suporte interno para a coleção ilimitada de legendas. Cada legenda tem sua própria Font: TFont e pode ser centralizada ou posicionada em relação aos cantos do painel.
Além disso, o TJppPanel possui um suporte interno para a coleção ilimitada de linhas horizontais, linhas verticais e barras horizontais.
Mais informações ...
Uma versão truncada do TJppPanel . Não possui coleções internas de legendas, linhas verticais, linhas horizontais e barras horizontais.
Uma versão truncada do TJppBasicPanel . DrawTopBorder apenas um gradiente, todas DrawBottomBorder fronteiras têm DrawRightBorder mesma DrawLeftBorder Appearance Appearance.BorderColor .
Este painel é ótimo para criar um layout básico da interface do usuário.
Painel dobrável altamente personalizável com base no painel TJvRollOut do pacote jvcl https://github.com/project-jedi/jvcl/blob/master/jvcl/run/jvrollout.pas
Licença original: MPL 1.1
Minhas modificações: domínio público

Você pode colocar painéis alinhados na ScrollBox para simular CategoryPanelGroup a partir de Delphi.
Descendente de TCustomPanel
Painel padrão com suporte de ancoragem do componente.
Atualmente apenas para Delphi .
TJppPngButton é um botão estendido TPngBitBtn do pacote PNGComponents .

O botão pode estar em um dos cinco estados : normal , quente , para baixo (pressionado), focado e desativado . Para cada estado, você pode definir toda uma gama de parâmetros de exibição: gradiente superior e inferior de cor/sólido (da mesma forma que TJppPanel ), cor da borda, estilo e largura, parâmetros de fonte (cor, nome, tamanho, estilo).
Se você deseja que o botão seja exibido nas cores do sistema, True Appearance.DefaultDrawing da propriedade Appearance.<STATES>
O número de todas as cores para todos os estados do botão é realmente grande, então decidi facilitar o gerenciamento das cores exibidas usando esquemas de cores prontos para uso (mapas de cores).
Eu criei 36 esquemas de cores diferentes para TJppPngButton . Para alterar o esquema de cores ativo, selecione um dos esquemas disponíveis na propriedade ColorMapType no inspetor de objeto .
Os esquemas de cores podem ser editados com o programa TJppPngButton Color Maps Designer , localizado no repositório no diretório demos .
Mais informações ...
Atualmente apenas para Delphi .
Este botão é uma versão ligeiramente truncada do TJppPngButton . Ele possui apenas um gradiente para cada estado de botão e não suporta esquemas de cores.
Atualmente apenas para Delphi .
Semelhante ao TJppBasicPngButton , mas com suporte para subcaption.

Esse botão é muito semelhante ao TJppBasicPngButton , mas é baseado no TGraphicControl , por isso não aceita o foco (não possui estado focado ).
Descendente de TCustomComboBox .
Propriedades adicionais:
AnchoredControlsBoundLabel - Rótulo interno.Flash - Opções piscantes. Para ativar o piscar, chame o método FlashBackground no código.ShowLabel - Mostrar / ocultar rótulo encadernado.TagExt Descendente de TCustomComboBoxEx .
Corrigido o bug de altura do item nas versões Delphi mais antigas.

Propriedades adicionais:
AnchoredControlsBoundLabel - Rótulo interno.Flash - Opções piscantes. Para ativar o piscar, chame o método FlashBackground no código.ShowLabel - Mostrar / ocultar rótulo encadernado.TagExtItemIndex publicadoAtualmente apenas para Delphi .
ComboBox altamente personalizável com base no TFlatComboBox
https://github.com/jackdp/flatstyle/blob/master/source/tflatcomboboxunit.pas

Um ComboBox altamente personalizável exibindo uma lista de cores predefinidas e/ou definidas pelo usuário.




O TJppColorComboBox possui 4 componentes internos: um rótulo e 3 botões para alterar, copiar e colar cores.
As cores podem ser exibidas em três formatos: RGB INT (por exemplo, 051,102.255), RGB Hex (por exemplo, #3366FF) e BGR Hex (por exemplo, $ 00FF6633). Se você precisar exibir a cor em um formato diferente, poderá fazer isso no manipulador de eventos OnGetColorStrValue .
Além dos itens padrão (exibindo cores), você também pode adicionar separadores e itens ChangeColor .
Cada cor selecionada pelo usuário, mas ainda não na lista de cores, pode ser adicionada automaticamente ao final ou na parte superior da lista. Graças a isso, o usuário do seu aplicativo tem acesso ao histórico de cores selecionadas anteriormente.
Mais informações ...
Uma caixa de listagem altamente personalizável exibindo uma lista de cores predefinidas e/ou definidas pelo usuário.


É muito semelhante ao TJppColorComboBox , mas não possui componentes embutidos.
O TJPPCOLORSWATCH é um componente que exibe a cor e seu valor (código) em dois formatos.

Consiste em três partes: um retângulo exibindo a cor (à esquerda) e dois retângulos com os códigos da cor selecionada. Cada peça pode ser oculta, para que você possa, por exemplo, exibir apenas um retângulo com uma cor ou apenas o código de cores no formato selecionado.
Formatos de cores disponíveis:
| Formatar | Exemplo |
|---|---|
ctBgr | 128,064,032 |
ctCmyk | 075,050,000,050 |
ctCppHex | 0x00804020 |
ctHslCss | 220,60%,31% |
ctHslWin | 146,144,075 |
ctHtml | #204080 |
ctPascalHex | $00804020 |
ctPascalInt | 8405024 |
ctRgb | 032,064,128 |
ctRgbPercent | 13%,25%,50% |
Se você deseja exibir o código de cores em algum outro formato, poderá fazê -lo no manipulador de eventos OnGetTopColorStrValue (para o código de cores superior) e OnGetBottomColorStrValue (para a parte inferior).
O TJPPCOLORSWATCHEX é uma versão estendida do TJPPCOLORSWATCH . Possui um rótulo embutido ( BoundLabel ) e três botões: ButtonChangeColor , ButtonCopyColor e ButtonPasteColor .
BoundLabel é um rótulo padrão (descendente de TCustomLabel ) e pode ser exibido à esquerda, direita, acima ou abaixo do componente. Os botões são herdados da classe TJppBasicSpeedButton , para que você possa definir livremente as cores para todos os estados de botão (normal, quente, desativado, desativado) e o ícone PNG.
Uma barra de progresso altamente personalizável com base no pacote JVSpecial do pacote JVCL, mas com muitas das minhas modificações. https://github.com/project-jedi/jvcl/blob/master/jvcl/run/jvspecialprogress.pas

Minhas modificações:
Aparência
Aqui você pode modificar muitos parâmetros relacionados à aparência do controle: cor de fundo e barra de progresso (sólida ou gradiente), cor e tamanho da borda, fontes (para estado normal e desativado), alinhamento de texto (canto superior, centro superior, canto superior direito, esquerda, centro ...), prefixo e postfix, texto e muito mais. Ao contrário da barra de progresso padrão, o TJppProgressBar também permite definir as cores exibidas quando o componente estiver desativado.
EndMarker - Um retângulo desenhado no final da barra de progresso.
TextDisplayMode - posição, porcentagem, posição em pixels, legenda ou nenhum.
Etapas: Médio e final - você pode fazer correções de cores aqui.
ProgressBarvisible - Aqui você pode bloquear a barra de progresso de exibir e exibir apenas o texto.
AnchoredControls
Você pode fixar um controle externo (por exemplo, Tbutton, TEDIT) em cada borda de um componente.
Boundlabel - rótulo interno
UpdatePositionIfDisabled - Aqui você pode decidir se deve atualizar a barra de progresso quando o componente estiver desativado.
OnProgressChanged
Acionado quando a posição atual muda. Você pode executar algumas ações adicionais aqui.
Tagext
Atualmente apenas para Delphi .
Um componente leve HTML HTML para Delphi (em Lázaro que ele compila, mas não funciona).

Este componente foi criado combinando duas unidades Pascal:
Tflathintunit.pas do pacote Flatstyle
https://github.com/jackdp/flatstyle/blob/master/source/tflathintunit.pas
Licença: Grátis (sem informações adicionais)
Hthint.pas do pacote jvcl https://github.com/project-jedi/jvcl/blob/master/jvcl/install/jvclinstall/helpers/hthint.pas
Licença: MPL 1.1
Licença para minhas modificações: sem licença (domínio público)
O TJPPHTMLHINT não é um componente HTML completo. Este é um componente leve e muito simples, com suporte para apenas algumas tags HTML, além disso, com uma sintaxe ligeiramente incomum.
Tags suportadas:
B - <b>bold text</b>
I - <i>italic</i>
U - <u>underline</u>
S - <s>strike out</s>
C : Cor - Cor do texto, por exemplo: <c:clRed>text</cl> , <cl:Red>text</c> , <c:#FF0000>text</c> , <c:255,0,0>RGB color</c>
BG : Cor - cor de fundo, por exemplo. <bg:clYellow>yellow background</bg>
IND : X - Indentação da posição atual. eg. <ind:10>
AIND : X - Indentação absoluta, por exemplo. <aind:20>
FS : X - Tamanho da fonte, por exemplo. <fs:12>some text</fs> , <fs:+4>text</fs>
FN : Nome - Nome da fonte, por exemplo. <fn:Verdana>text</fn> , <fn:Courier New>text</fn> , <fn:default>restore default font</fn>
Metacolors (ou Mode-Colors): cores tiradas da Appearance.DarkModeColors ou Appearance.LightModeColors Paleta
Exemplo: <c:mclDarkBlue><bg:mclLightGray>dark blue text on light gray background</bg></c>
Entidades HTML: consulte a função ReplaceHtmlEntities no arquivo JPP.HtmlHint.pas .
Descendente de TCustomLabel .
Propriedades adicionais: AnchoredControls, Tagext.
Com base no TJppLabel .
Propriedades adicionais: sombra para estado ativado e desativado, cor de legenda desativada, borda (cor, tamanho, estilo), preenchimento.

Descendente de TCustomLabel .
Rótulo com fontes adicionais ( TFont ) para 5 estados: Normal , visitado Normal , Hot , visitado-HOT e Desativado .
Depois de clicar, ele pode abrir o URL no navegador padrão, executar o arquivo com ShellExecute ou executar uma ação da TactionList .
Mais informações ...
Um componente de etiqueta composto por 3 partes:
Caption da propriedade)RightCaption da propriedade)Baseado em tpegtopllinelabel de componentes comuns do PEGTOP escritos por Jens Gruschel (http://www.pegtop.net/delphi/components/common/index.htm).



Minhas modificações:
Annex renomeado para RightCaptionJpp A RightCaption tem sua própria fonte, fundo e cor da borda. A RightCaption pode ser posicionada verticalmente por RightCaptionPosDeltaY . A linha pode ser posicionada verticalmente por LinePosDeltaY . O comprimento da linha pode ser modificado pelo LineSizeDeltaX1 e LineSizeDeltaX2 . Se AutoHeight = True , a altura do componente será calculada e aplicada automaticamente.
Um componente de etiqueta simples composto por 2 legendas: esquerda ( Caption da propriedade) e direita ( RightCaption da propriedade).

O espaço entre as legendas pode ser modificado usando a propriedade Spacing . Baseado no TJPPDOUBLELINELALABEL .
Um componente de edição derivado de TCustomEdit .

Propriedades adicionais:
AnchoredControlsAppearance - Aqui você pode definir o plano de fundo e a cor da fonte para quatro estados: normal, quente, focado, desativado.BoundLabel - rótulo internoFlash - FlashColor , FlashCount , FlashInterval . Para ativar o piscar, chame o método FlashBackground . Esta função pode ser usada para indicar o usuário de um valor incorreto.ShowLabel - Mostrar / ocultar rótulo encadernado.TagExt - tag estendida. Atualmente apenas para Delphi .
Semelhante ao TJppEdit , mas também tem a capacidade de definir as cores da borda.
Métodos de desenho de fronteira baseados no TFlatEdit do pacote de estilo plano https://sourceforge.net/projects/flatstyle/

Descendente de TCustomMemo .
Propriedades adicionais:
AnchoredControlsAppearance - Aqui você pode definir o plano de fundo e a cor da fonte para quatro estados: normal, quente, focado, desativado.BoundLabel - rótulo internoFlash - FlashColor , FlashCount , FlashInterval . Para ativar o piscar, chame o método FlashBackground . Esta função pode ser usada para indicar o usuário de um valor incorreto.ShowLabel - Mostrar / ocultar rótulo encadernado.Text - fácil acesso a Lines.TextTagExt - tag estendida. Semelhante ao TJppMemo , mas também tem a capacidade de definir as cores da borda.
Métodos de desenho de fronteira baseados no TFlatMemo do pacote de estilo plano https://sourceforge.net/projects/flatstyle/

Um TCheckBox padrão com o suporte TagExt e AnchoredControls .
Um TRadioButton padrão com o suporte TagExt e AnchoredControls .
Um TDateTimePicker padrão com suporte de BoundLabel , TagExt e AnchoredControls .
Somente Windows
Lázaro e Delphi X2 ou mais recentes.
Seletor de estilo GDI+ Hatch altamente personalizável com BoundLabel e AnchoredControls .

Uma caixa combinada altamente personalizável com uma lista de estilos de pincel.

O estilo atual pode ser lido/definido usando a propriedade Selected .
O nome de exibição do estilo do pincel pode ser alterado no manipulador de eventos OnGetDisplayName .
O TJppBrushStyCombOBox possui um rótulo embutido ( BoundLabel ).
Uma caixa combinada altamente personalizável com uma lista de estilos de caneta.

O estilo atual pode ser lido/definido usando a propriedade Selected .
O nome de exibição do estilo da caneta pode ser alterado no manipulador de eventos OnGetDisplayName .
O TJPPPenstyLecombobox possui um rótulo embutido ( BoundLabel ).
Um componente TTimer padrão com algumas propriedades e métodos adicionais:
RepeatCountLimit PROPRIEDADE. Aqui você pode definir quantas vezes o intervalo de tempo especificado na propriedade Interval pode ser alcançado. O valor 0 significa nenhum limite.Counter -propriedade. Cada vez que o intervalo de tempo especificado na propriedade Interval expira, a propriedade Counter é incrementada em 1. Quando o Counter atinge o valor da repetição do manipulador de eventos RepeatCountLimit , o timer é interrompido e o manipulador de eventos OnRepeatCountLimitReached é acionado (se atribuído).ClearCounterOnStart Propriedade. Se estiver definido como True , o método Start redefine o Counter .Start . Conjuntos Enabled para True . Se ClearCounterOnStart estiver definido como True , o Start define a propriedade Counter para 0 .Stop . Define o Enabled para False .OnRepeatCountLimitReached Event - disparado quando o Counter atinge o valor da RepeatCountLimit . Exemplo: exibindo o contador a cada segundo. Exiba a mensagem após 10 segundos e desligue o Timer .
procedure TForm1.FormCreate (Sender: TObject);
begin
JppTimer1.Interval := 1000 ;
JppTimer1.RepeatCountLimit := 10 ; // JppTimer1 will stop automatically after 10 seconds.
JppTimer1.Start;
end ;
procedure TForm1.JppTimer1Timer (Sender: TObject);
begin
Label1.Caption := JppTimer1.Counter.ToString;
end ;
procedure TForm1.JppTimer1RepeatCountLimitReached (Sender: TObject);
begin
ShowMessage( ' 10 seconds elapsed! ' );
end ; Um componente não visual que pode armazenar qualquer número de imagens PNG. Pode estar associado a um componente de timania externo.
Ao contrário do Timagelist , cada imagem pode ter um tamanho diferente. As imagens são armazenadas internamente como PNG, não bitmaps, o que reduz o tamanho do arquivo DFM. Obviamente, assumindo que as imagens PNG são compactadas.
As imagens PNG podem ser adicionadas no inspetor de objetos ou no código usando os métodos AddPngImage , AddImageFromFile ou Items.Insert :
...
var
Png: TPngImage;
begin
Png := TPngImage.Create;
try
Png.LoadFromFile( ' C:image.png ' );
JppPngCollection.AddPngImage(Png);
// OR
// JppPngCollection.AddPngImageFromFile('C:image.png');
finally
Png.Free;
end ;
end ; O método AddPngImage adiciona uma cópia da imagem PNG, então você é responsável por liberar o objeto Png no exemplo acima.
Para recuperar uma imagem PNG de uma coleção, você pode usar os métodos: GetPngImage , GetPngImageByName ou Items[Index].PngImage .
Existem propriedades adicionais associadas a cada imagem PNG na coleção:
Name : string;
Description: string;
Tag: integer;
Enabled: BooleanE apenas propriedades de leitura:
Width: integer;
Height: integer; Importante! Os objetos tpngimage são criados automaticamente ao criar itens de coleção. Se você deseja verificar se algum item da coleção possui uma imagem PNG atribuída, não pode fazê -lo comparando com o NIL . Você deve usar o método TPngImage.Empty :
// Improperly
if JppPngCollection.Items[ 0 ].PngImage <> nil then ... // <-- Always returns True // Properly
if not JppPngCollection.Items[ 0 ].PngImage.Empty then ... // OK, image assigned TJppStorageCtrl é um componente não visual que permite armazenar informações de diferentes tipos na coleção. Cada item da coleção armazena os seguintes dados:
Os itens são acessíveis do inspetor de objeto usando a propriedade StorageCollection . Os valores de cada item da coleção, exceto ponteiros, também podem ser definidos no inspetor de objeto . Os valores do ponteiro só podem ser definidos no código e são inicializados por padrão para nil .
Para acessar os itens de coleta no código, você pode usar a propriedade Items , por exemplo:
JppStorageCtrl.Items[ 0 ].IntValue1 := 1 ;
JppStorageCtrl.Items[ 0 ].PointerValue1 := SomePointer; Mas, como Items são definidos como a propriedade padrão , você pode escrevê -la simplesmente:
JppStorageCtrl[ 0 ].IntValue1 := 1 ;
JppStorageCtrl[ 0 ].PointerValue1 := SomePointer;Esse componente pode ser útil se você deseja ter acesso a alguns dados globais e não deseja criar variáveis globais.
Às vezes, uso esse componente nos estágios iniciais dos aplicativos de redação. Em estágios posteriores, uma maneira definitivamente melhor de armazenar e gerenciar dados é projetar registros, aulas, matrizes, recipientes genéricos/ponteiros, etc.
Um componente não visual que permite armazenar a coleta de strings com dados adicionais. Cada item da coleção tem as seguintes propriedades:
ItemName: string;
Value : string;
Enabled: Boolean;
Tag: integer;Antes de instalar o pacote jppack , você deve primeiro instalar os seguintes pacotes:
Se você instalou os componentes PNG usando o gerenciador de pacotes Getit , provavelmente precisará alterar o nome PngComponents para PngComponentsD no arquivo jppack.dpk .
Na pasta Pacotes, você pode encontrar pacotes de instalação para todas as versões Delphi, de Delphi 2009 a 10.4 Sydney . Vá para a subpasta com o nome da sua versão Delphi (por exemplo, Delphi_XE7 para a versão XE7) e abra o arquivo JPPack.dproj ou JPPack.dpk . No gerente do projeto , clique com o botão direito do mouse no arquivo JPPack.bpl e selecione Install no menu pop-up. Após um curto período de tempo, uma mensagem deve aparecer exibindo informações sobre a instalação correta do pacote e com a lista de componentes recém -instalados. Todos os componentes que você pode encontrar na página JPPack na paleta de ferramentas .
Você também pode compilar o pacote para Win64 Target.
Depois de instalar o pacote, é melhor adicionar a pasta source ao caminho da biblioteca :
Tools de menu -> Options .Environment Options -> Delphi Options -> Library .; (Semicolon) e o caminho para o diretório source . Primeiro, instale o pacote jplib em https://github.com/jackdp/jplib
No Windows, também instale o igdiplusmod em https://github.com/jackdp/igdiplusmod
Arquivo de pacote aberto ( packagesLazarusjppacklcl.lpk ) no IDE Lazarus. Clique em Button Compile e Use -> Install e reconstrua o IDE. Todos os componentes que você pode encontrar na página Jppacklcl na paleta de componentes .
Instale o pacote jplib em https://github.com/jackdp/jplib
No Windows, também instale o igdiplusmod em https://github.com/jackdp/igdiplusmod
Arquivo de pacote aberto ( packagesCodeTyphonjppacklcl.ctpkg ) no Typhon IDE. Clique em Compile package do botão (botão 2-ND na barra de ferramentas) e clique no botão 3-RD, selecione Install e reconstruir o IDE. Todos os componentes que você pode encontrar na página Jppacklcl na paleta de componentes .
A licença para o meu trabalho: domínio público. Você pode fazer com o meu código o que quiser, sem limitações.
Mas, em algumas unidades, uso o código de outros projetos de código aberto, portanto, você deve examinar os arquivos de origem do PAS e a licença dos autores desses projetos para obter mais informações.