Ir para conteúdo
Fórum Script Brasil
  • 0

Post-it


Paulo Nobre

Pergunta

Estudando o delphi estou tentando fazer um mini-mini programa simulando um post-it, destes que já existem milhares por aí. (por exemplo o ATNotes, freeware excelente , que já está na versão 9)

Preciso do seguinte: Ao clicar num botão, que apareça uma folha amarela(a cor nãoé relevante aqui-coloquei só para lembrar o que é um post-it) no desktop. Esta folha deverá ter dimensões mínimas, praticamente aparecendo

apenas o cursor piscando e na medida que a pessoa for digitando o texto vá aparecendo,inclusive mudando de linha quando for dado enter.

Gostaria de ajuda para o seguinte:

Com um form acho que isto nãoé possível(mudar de dimensão ao digitar), ou é?

Funcionaria com um label dentro do form(com a propriedade allcliente=true)?

Isto porque não sei se o label mudando de forma fará o form mudar também.(estou semo delphi aqui,por isto não testei e pergunto)

Alguém já tentou fazer um?

Alguém pode me ajudar?

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Prezado Vivendo&Aprendendo,

mas no caso da digitação como seria,já que a fonte pode ser escolhida pelo usuário.

No caso do exemplo seria para mudar de linha,correto? #13 é o enter náo?

Preciso de algum componente que iria se expandindo na medida que fosse digitando,independentemente do tamanho da fonte.

Obrigado mesmo assim.

Link para o comentário
Compartilhar em outros sites

  • 0

Paulo componente eu não conheço que faça isso, mas pode-se fazer tudo via programação.

Para aumentar a linha pode colocar no OnKeyPress para quando qualquer tecla for precionada sem ser o enter ele aumente um campo para a direta e se for o enter ele joga uma linha para baixo.

falou

Link para o comentário
Compartilhar em outros sites

  • 0

Vivendo&Aprendendo, entendi o que você falou:

Usando algo semelhante ao que você mostrou anteriormente poderia expandir para direita.

Mas, repare o seguinte: digitei uma frase, o form está com width 30 por exemplo,

dou enter o form continua com o mesmo comprimento(até porque preciso ler o que já está escrito), quando na segunda linha começoa escrever o form vai aumentar mais ainda sem necessidade. Deu para entender.

Além disso estou como seguinte problema, que não consigo solucionar de jeito nenhum:

Para escrever o texto tenho que usar um Memo(o label não serve), porém o caption do form não pode aparecer e tenho que poder arrastá-lo ao clicar nele.

Aí alguém diria tem um código para isto(o tal de H: HNDW ... e ...se H<>......veja abaixo).

procedure WMNCHitTest(var Msg: TMessage); 
  message WM_NCHitTest;

procedure TForm1.WMNCHitTest(var Msg: TMessage);
begin
  if GetAsyncKeyState(VK_LBUTTON) < 0 then
  Msg.Result := HTCAPTION
  else
  Msg.Result := HTCLIENT;
end;

Mas este código não funciona com um Memo, pois sempre que abro o form(com o edit nele ocupando toda o form- alcliente=true)o form já entra com o Memo em foco, ou seja o cursor piscando. Um post-it funciona assim:Quando você manda criar um ele já aparece com o cursor piscando para ser editado.

Continuo na estaca zero.

Link para o comentário
Compartilhar em outros sites

  • 0

Paulo.... você pode verificar antes de mandar aumentar o form, tipo assim se existir espaço em branco para a frente do cursor ele não aumente o tamanho, mas caso contrário ele redimensiona o form. Ai quando você der enter e criar uma nova linha ele só irá aumentar o form se a linha onde esta o foco for maior que a linha anterior...

Olha Paulo esta ai uma dica que encontrei para arrastar o form, não testei ainda, mas testa ai e qualquer coisa posta.... falou.

{Quando você pressiona o botão do mouse, o Windows identifica a posição da tela onde o cursor estava no momento do clique. Se a posição é igual a área do Caption do Form, o Windows ativa o modo de movimentação do Form permitindo que este seja arrastado. Portanto, a maneira mais fácil de solucionar esta questão é "enganar" o Win-dows.
Neste exemplo vamos considerar que o usuário poderá arrastar o Form ao cli-car na área cliente deste Form:
a) Crie uma nova aplicação;
b) Adicione a seguinte declaração na seção private do Form:
procedure WMNCHitTest(var M: TWMNCHitTest); message wm_NCHitTest;
c) Adicione o código deste procedimento na seção implementation do Form:
}

procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
begin
  inherited; // ativa a herança da mensagem 
  if M.Result = htClient then // o clique foi na área cliente? 
    M.Result := htCaption; // se sim, faz o Windows pensar que foi no Cap-tion. 
end;

{ Este exemplo tratou o clique na área cliente. Você pode alterar este código para suas necessidades. Eis os possíveis valores para o Result:

VALOR - Local do clique
HTBORDER - Borda da janela que não tem a borda de tamanho
HTBOTTOM - Borda horizontal inferior da janela
HTBOTTOMLEFT - Canto inferior esquerdo da janela
HTBOTTOMRIGHT - Canto inferior direito da janela
HTCAPTION - Barra de Título(Caption)
HTCLIENT - Área cliente
HTERROR - igual ao HTNOWHERE, a diferença é que produz um beep indicando erro
HTGROWBOX - Caixa de tamanho (igual ao HTSIZE)
HTHSCROLL - Barra de rolagem horizontal
HTLEFT - Borda esquerda da janela
HTMENU - Em um menu
HTNOWHERE - Plano de fundo da janela ou linha de divisão entre janelas
HTREDUCE - Botão minimizar
HTRIGHT - Borda direita da janela
HTSIZE - Caixa de tamanho (igual ao HTGROWBOX)
HTSYSMENU - Botão de Sistema/Fechar da janela MDIChild
HTTOP - Borda horizontal superior da janela
HTTOPLEFT - Canto superior esquerdo da janela
HTTOPRIGHT - Canto direito superior da janela
HTTRANSPARENT - Janela em segundo plano
HTVSCROLL - Barra de rolagem vertical
HTZOOM - Botão maximizar
} 

Espero ter ajudado e lembrando se não der certo posta ai que vamos tentar resolver isso juntos...

V&A

Link para o comentário
Compartilhar em outros sites

  • 0

Cara não sei se é bem isso que você deseja não, mas dá uma olhada no que eu fiz aqui.

Coloque um Form com um RichEdit.

No form coloquei as propriedades

ClientHeight = 16

ClientWidth = 115

BorderIcons = [] FALSE EM TODOS

BorderStyle = bsnone

No RichEdit Coloquei as prorpiedades

Height = 17

Width = 113

A partir daí eu utilizei 2 eventos:

OnKeyPress do Form

OnChange do RichEdit

Da uma olhada no Código ai :


unit Unit_principal;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
    procedure RichEdit1Change(Sender: TObject);
    procedure RichEdit1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  I : integer = 0;
  L : integer = 0;

implementation

{$R *.dfm}

procedure TForm1.RichEdit1Change(Sender: TObject);
begin
  i:=i+1;
  l := l + 1;
  if i >= 8 then
  begin
    if RichEdit1.ClientWidth < 258 then
    begin
      i:=0;
      Form1.ClientWidth := Form1.ClientWidth + 25;
      RichEdit1.ClientWidth := RichEdit1.ClientWidth + 25;
    end;
    if RichEdit1.ClientHeight < 100 then
    begin
      if l >= 35 then
      begin
       l :=0;
       Form1.ClientHeight := Form1.ClientHeight + 17;
       RichEdit1.ClientHeight := RichEdit1.ClientHeight + 17;
      end;
    end;
  end;
end;

procedure TForm1.RichEdit1KeyPress(Sender: TObject; var Key: Char);
begin
  if RichEdit1.Lines.Count < 5 then
  begin
    if key = #13 then
    begin
      Form1.ClientHeight := Form1.ClientHeight + 17;
      RichEdit1.ClientHeight := RichEdit1.ClientHeight + 17;
    end;
  end;
end;

end.

falou!!!!

Link para o comentário
Compartilhar em outros sites

  • 0

Prezado VitorBrando,

era exatamente isto que estava precisando!

Muito Obrigado!

Apenas uma pergunta em relação ao código abaixo:

Form1.ClientWidth := Form1.ClientWidth + 25;

    RichEdit1.ClientWidth := RichEdit1.ClientWidth + 25

Se eu colocar RichEdit com a propriedade alcliente = true (nem sei se isso é possível pois nunca trabalhei com ele), poderei usar só

Form1.ClientWidth := Form1.ClientWidth + 25;

e esquecer

RichEdit1.ClientWidth := RichEdit1.ClientWidth + 25 ???

Abraços

Paulo Nobre

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado Vitor..

Só perguntei por que primeiro não estou com o Delphi aqui no trabalho, segundo não usei ainda este componente com o Delphi(tinha usado uma vez no VB e acho que deve ser semelhante) e terceiro fiquei na dúvida pois você colocou o heigth do rich maior um pouco do que o do form.

Mas, o principal você fez

Um abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...