Barra de texto Profissional

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Barra de texto Profissional

Mensagem por Witen em Seg 23 Jun 2014, 17:47

Nome: Engine de Barra de texto
Requerimentos: Versão do GMS e GM8 - Pro
Descrição: Contem tudo que uma barra de texto merece: Copiar; colar; selecionar; substituir; movimentar cursor; entre outros...
Nível de dificuldade: Mediano
Controles/Informações: Teclado é possível configurar o tipo de carácter a ser escrito.
Donwload:Barra de Texto

Irei postar os códigos caso um dia o link de download quebre
Create:
///Criador := Witen;
image_single = 0
_Selected = false //Checa se a barra(Campo) esta selecionada
Fake_Text = 'Nome do smadol' //Nome de apresentação(Quando clicar na barra ele some)
Max_Text = 25 //Numero maximo de caracteres
   _Text = Fake_Text //_Text é a variavel que quarda o texto escrito
Text_Pre_Selected  = 0 //Quanda onde começa a seleção de texto
Text_Pos_Selected  = 0 //Quanda onde termina a seleção de texto
Text_Selected_Size = 0 //Quanda o tamanho da seleção - OBS: Se seu valor for igual a 0 significa que nada foi selecinado
   _Bar = '|' //O nosso cursor Happy'
alarm[0] = 15 //Alarme para transforma o cursor em um vagalume, o deixa piscando.
   _Font  = FntChat //fonte
Font_Color = c_black //Cor da fonte
Camp_Color = c_blue  //Cor do campo de seleção
   _Cursor = 0 //Posição do curso
Camp_X = x //Posição do campo de seleção(x)
Camp_Y = y //Posição do campo de seleção(y)
Camp_W = sprite_width //largura do campo de seleção
Camp_H = sprite_height //altura do campo de seleção
_Width = 9 //Tamanho de um caracterer   OBS - VARIA DE ACORDO COM CADA FONTE, se for mudar a fonte terar que mudar-la tambem
Bord_W = _Width /2 //Distancia Horizontal da borda - Só serve para posicionar melhor o texto
Bord_H = 6 //Distancia vertical da borda
Curso_X = 0 //Quarda a posição do mouse
Previus_Curso_X = 0 //Quarda a posição do mouse anterior
Line_Dist = -1 /*Esta variavel determina o espaçamento de cada linha(valor padrão -1)
Ai você se pergunta: -como assim? não é preciso, nós só usaremos uma linha.
é que eu vou transforma isso em uma caixa de texto depois ai vai ter infinidades de linhas è.é"

Alarm0:
if _Bar = '|'{_Bar = ''}else{_Bar = '|'}//Se a barra estiver visivel ela apaga, caso o contrario se estiver invisivel ela aparece \o/
alarm[0] = 15//Não queremos que o cursor pare de piscar estão atualizamos o alarme

Draw:
//Desenhando texto
draw_sprite(sprite_index,image_single,x,y)//Desenha o Sprite da barra
draw_set_font(_Font);
draw_set_color(Font_Color)
draw_text_ext(Camp_X+Bord_W,Camp_Y+Bord_H,_Text,Line_Dist,Camp_W)//Desenha nosso _Text
if (_Selected == true) //Se a barra(Campo) estiver selecionado
{
   //Desenhando retangulo de seleção(Quando clicamos na barra ele aparece)
   draw_set_color(Camp_Color)
   draw_rectangle(Camp_X+1,Camp_Y+1,Camp_X+Camp_W-1,Camp_Y+Camp_H-1,true)
   //Largura do cursor
   Cursor_Width  = _Cursor*_Width//Essa variavel mostra quanto espaço tem antes do curso ate o inicio da barra, em Pixel
   //Desenhando Cursor
   draw_set_color(Font_Color)
   draw_text(Camp_X+Cursor_Width,Camp_Y+Bord_H,_Bar)
   //Desenhando texto selecionado
   draw_set_color(Camp_Color)
   draw_set_alpha(0.5)//Transparencia em 0.5 para que possamos ver o que esta selecionado por baixo do retangulo
   if Text_Selected_Size > 0{//Se tivermos selecionado algo desenha o retangulo de seleção
   draw_rectangle((Text_Pre_Selected*_Width)+Bord_W+Camp_X,Camp_Y+Bord_H,(Text_Pos_Selected*_Width)+Camp_X+Bord_W,Camp_Y+Bord_H+string_height(_Text),false)} //outline false para que o retangulo seja completamente prenchido
   draw_set_alpha(1)//Voltei a transparencia padrão para não afetar outros Draw's
}
//Se clicar na barra a variavel selecionado fica ativa
if mouse_check_button_pressed(mb_left){
if mouse_x > Camp_X and mouse_y > Camp_Y and mouse_x < Camp_X+Camp_W and mouse_y < Camp_Y+Camp_H{_Selected = true}else{_Selected = false}}
//--------------Criando o texto inicial(antes de clicar na barra)-----------------------------//
if _Selected = true  and _Text = Fake_Text{_Text = ''}//Se selecionarmos a barra e o texto sor o de apresentação(Fake) apagamos o texto
if _Selected = false and _Text = ''{_Text = Fake_Text}//Se a Barra não estiver selecionada e o texto estiver vazio exibimos o texto falso
//Atualiazando cursor de acordo com o local clicado
if mouse_check_button_pressed(mb_left){
   if mouse_x > Camp_X and mouse_y > Camp_Y and mouse_x < Camp_X+Camp_W and mouse_y < Camp_Y+Camp_H{//Checa se estamos clicando no campo
   Previus_Curso_X = round((mouse_x-Camp_X)/_Width);
   _Cursor = round((mouse_x-Camp_X)/_Width)//Atualizando posição do curso de acordo do local onde se clicou
   if _Cursor > string_length(_Text){_Cursor = string_length(_Text)} //Se o lugar onde foi clicado é meio do que o texto o curso vai para o final do texto
}}
//Pegando inicio e final da posição calculando seu tamanho em seguida
if mouse_check_button(mb_left){
   Curso_X = round((mouse_x-Camp_X)/_Width);
   Text_Pre_Selected = max(min(Curso_X,Previus_Curso_X ,string_length(_Text)),0)
   Text_Pos_Selected = min(max(Curso_X,Previus_Curso_X),string_length(_Text))
   Text_Selected_Size = Text_Pos_Selected-Text_Pre_Selected
}

Key Press - Any Kay:
//Este código pode ser colocado em um evento continuo como Step, mas não aconselho a fazer isto
//Essa checagem é feita(_Selected == false) para que não escrevamos nada sem esta com a barra selecionada
if (_Selected == false) or (keyboard_key == 0) exit;
//-----------------------------------------Botoes basicos-----------------------------------------------------//
//--------------------------------------------Apagando--------------------------------------------------------//
if keyboard_check(vk_backspace) or keyboard_check(vk_delete){
   if Text_Selected_Size > 0{//Checa se tem texto selecionado
       _Text = string_delete(_Text,Text_Pre_Selected+1,Text_Selected_Size);//Se tiver texto selecionado o trecho é apagado
   if Text_Pre_Selected >= Curso_X{//Checa se o texto foi selecionado da direita para esquerda
       _Cursor-= Text_Selected_Size}//salva a nova posição do curso
       Text_Selected_Size = 0; //Mudamos a variavel para 0 pois não queremos que fique selecionado um trecho que não existe
exit}//Para o script
   if _Cursor > 0{//Chega se o cursor esta no inicio do texto, se estiver não tem o que apagar
   _Text = string_delete(_Text,_Cursor,1);//Deleta uma casa
   _Cursor-=1;}//Atualiza a nova posição do cursor
exit}//Para o script
//-----------------------------------------Movendo Cursor----------------------------------------------------//
if Text_Selected_Size = 0{ //Se não existir texto selecionado podemos mover o cursor
   if keyboard_check(vk_left)  and _Cursor > 0{//Checa se botão esquerdo esta precionado e se o cursor ja esta no começo do texto
       _Cursor-=1;//Diminuir uma posição no cursor
exit}//Para o script
   if keyboard_check(vk_right) and _Cursor < string_length(_Text){//Checa Botão direito e se o curso já esta no fim do texto
       _Cursor+=1;//Adicionar uma posição ao cursor
exit}}//Para o script
//OBS: a checagem do fim e do começo do texto serve para o curso não ir para aonde não existe
//--------------------------------------------Colando--------------------------------------------------------//
if keyboard_check(vk_control) and keyboard_check(ord('V')){//Checa se Ctrl e V estão sendo precionados
       if Text_Selected_Size > 0{//Checa se tem texto selecionado
           _Text = string_delete(_Text,Text_Pre_Selected+1,Text_Selected_Size);//Se tiver texto selecionado o trecho é apagado para ser substituido
       if Text_Pre_Selected >= Curso_X{//Checa se o texto foi selecionado da direita para esquerda
           _Cursor-= Text_Selected_Size}//salva a nova posição do curso, eleminando o mesmo numero de posições que se foi apagado
           Text_Selected_Size = 0}//Mudamos para 0 pois não queremos que fique selecionado um trecho que não existe
   _Copy = string_copy(clipboard_get_text(),1,Max_Text-string_length(_Text));//Pega o que esta salvo no seu clipboard e o corta de acordo com o espaço restante na barra
   _Text = string_insert(_Copy,_Text,_Cursor+1) //Adicionar copia ao texto na mesma posição do Cursor
   _Cursor+= string_length(_Copy)//Adiciona numero casas de acordo com o tamanho do texto colado
exit}//Para o script
//--------------------------------------------Copiando--------------------------------------------------------//
if keyboard_check(vk_control) and keyboard_check(ord('C')){//Checa se Ctrl e C estão sendo precionados
   if Text_Selected_Size > 0{//Checa se tem texto selecionado
   clipboard_set_text(string_copy(_Text,Text_Pre_Selected+1,Text_Selected_Size));}//Copia trecho selecionado
exit}//Para o script
//-------------------------------------------Escrevendo-------------------------------------------------------//
//Checa se ainda há espaço para escrever e quais caracteres podemos escrever
if (string_length(_Text) < Max_Text) and (keyboard_key>=48 and keyboard_key<=57) or (keyboard_key>=65 and keyboard_key<=90) or (keyboard_key>=97 and keyboard_key<=122){
   if Text_Selected_Size > 0{//Checa se tem texto selecionado
       _Text = string_delete(_Text,Text_Pre_Selected+1,Text_Selected_Size);//Se tiver texto selecionado o trecho é apagado
   if Text_Pre_Selected >= Curso_X{//Checa se o texto foi selecionado da direita para esquerda
       _Cursor-= Text_Selected_Size}//salva a nova posição do curso, eleminando o mesmo numero de posições que se foi apagado
       Text_Selected_Size = 0}//Mudamos para 0 pois não queremos que fique selecionado um trecho que não existe
   _Text = string_insert(keyboard_lastchar,_Text,_Cursor+1) //Adiciona um caracterer de acordo com a posição do cursor
   _Cursor+=1;//Atualiza posição do curso
}

Witen

Ranking : Sem avaliações
Número de Mensagens : 515
Idade : 17
Data de inscrição : 23/05/2012
Reputação : 36
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.wibix.webs.com

Voltar ao Topo Ir em baixo

Re: Barra de texto Profissional

Mensagem por Isaque Onix em Sex 25 Jul 2014, 10:14

ca**lho como eu nao vi isso antes??? ficou otimo! parabens!

Isaque Onix

Número de Mensagens : 1597
Idade : 23
Data de inscrição : 15/08/2010
Reputação : 147
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://spyreserver.16mb.com

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum