sábado, 22 de maio de 2021

FMX - criando um novo cadastro num arquivo


No último post, nos responsabilizamos de fazer
um programa para criar cadastros num arquivo,
mas o programa tinha que ser capaz de saber
se existem cadastros vazios,
se existem, o programa deverá preencher
estes cadastros, se não houver cadastros vazios,
ou se todos já foram preenchidos o programa
deveria acrescentar um novo cadastro abaixo
do último registrado.
Na verdade tudo o que iriámos
precisar já foram feitos nos programas anteriores,
mas por falta de tempo passamos alguns
dias sem programar.
Para fazer este programa, criamos algumas
funções com retorno para string e inteiro,
e com alocação dinâmica, visto que os cadastros
tende à aumentar de acordo com uso.
O programa está apto à calcular o total
de cadastros, o total de linhas, e o tamanho em bytes
do arquivo e isto tudo em tempo de execução.
O funcionamento básico se resume na remoção
de um cadastro, ou na criação de um novo.
Quando um cadastro é removido,
o programa escreve no cadastro a palavra "Vazio",
e quando o usuário escolhe no menu a opção
criar cadastro, o programa pesquisa automaticamente,
por cadastros vazios utilizando a palavra
que ele mesmo escreveu (Vazio), se for encontrado,
é nesta posição que o novo cadastro será criado.
Na verdade até um ponto já seria suficiente
para isto, ou alguns caracteres em branco.
Para testar o funcionamento, vamos começar
com um arquivo totalmente vazio,
depois daremos uma pausa no vídeo,
e acrescentaremos manualmente vários outros cadastros,
para que o vídeo não fique tão extenso.
Depois iremos apagar e criar alguns.
Assistam o vídeo por favor.



//------------------------------------------------------------------------------
void T_Memo ( int X, int Y, int W, int H ) {
   Form5 -> Memo1 -> Position -> X = X;
   Form5 -> Memo1 -> Position -> Y = Y;
   Form5 -> Memo1 -> Width = W;
   Form5 -> Memo1 -> Height = H;
   Form5 -> Memo1 -> ShowScrollBars = True;
   Form5 -> Memo1 -> Size -> PlatformDefault = False;
   Form5 -> Memo1 -> TextSettings -> Font -> Family = "Consolas";
   Form5 -> Memo1 -> TextSettings -> Font -> Size = 14;
   Form5 -> Memo1 -> TextSettings -> Font -> Style = TFontStyles ( ) << fsBold << fsItalic;
   Form5 -> Memo1 -> TextSettings -> FontColor = claBlack;
}
//------------------------------------------------------------------------------
void T_Memo_1 ( int X, int Y, int W, int H ) {
   Form1 -> Memo1 -> Position -> X = X;
   Form1 -> Memo1 -> Position -> Y = Y;
   Form1 -> Memo1 -> Width = W;
   Form1 -> Memo1 -> Height = H;
   Form1 -> Memo1 -> ShowScrollBars = True;
   Form1 -> Memo1 -> Size -> PlatformDefault = False;
   Form1 -> Memo1 -> TextSettings -> Font -> Family = "Consolas";
   Form1 -> Memo1 -> TextSettings -> Font -> Size = 14;
   Form1 -> Memo1 -> TextSettings -> Font -> Style = TFontStyles ( ) << fsBold << fsItalic;
   Form1 -> Memo1 -> TextSettings -> FontColor = claBlue;
}
//------------------------------------------------------------------------------
void func ( bool val ) {
if ( val == false ) {
T_Text2 ( 150, 253, 170, 18, 1 );
Form5 -> Text2 -> Text = "Remover cadastro de Nº";
}
if ( val == true ) {
T_Text2 ( 150, 250, 270, 18, 3 );
Form5 -> Text2 -> Text = "O Cadastro foi removido com sucesso";
}
}
//------------------------------------------------------------------------------
void func_2 ( bool val ) {
  if ( val == false ) {
T_Rect ( 150, 60, 260, 18, 1, 2 );
T_Text ( 150, 60, 260, 18, 16, false, 1, 0, "Leitura de todos os cadastros" );
  }
  if ( val == true ) {
T_Rect ( 150, 60, 260, 18, 5, 4 );
T_Text ( 150, 60, 260, 18, 16, false, 5, 0, "Leitura de todos os cadastros" );
  }
}
//------------------------------------------------------------------------------