× Linguagem de Programação ADVPL

Perguntas ALOCAÇÃO DINÂMICA DE MEMÓRIA

Mais
10 anos 1 mês atrás #25336 por rafhapalles
Bom dia galera, to com um problema aqui bem legal, e preciso da ajuda dos Master Programmers de plantão.

Segue o desafio:
Preciso saber como fazer ALOCAÇÃO DINÂMICA DE MEMÓRIA em advpl, sei que no Delphi, C, C++, C# e Java é possivel, mas não encontrei nada parecido no advpl.

Vamos ver a galera master de verdade.

Brincadeiras a parte, esse é um problema sério que preciso resolver.

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 1 mês atrás #25337 por kanaamlrr
Respondido por kanaamlrr no tópico ALOCAÇÃO DINÂMICA DE MEMÓRIA
Bom dia Rafhael,
Para qual finalidade você precisa utilizar a alocação dinâmica?
Abraço!

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 1 mês atrás #25338 por rafhapalles
Respondido por rafhapalles no tópico ALOCAÇÃO DINÂMICA DE MEMÓRIA
O problema é o seguinte:

Recebi a missão de criar um Dlg onde contém de inicio um oFolder e um oFolderPage, porém antes de exibi-lo, preciso carregar diversos arquivos DBF, e para cada arquivo preciso criar um novo oFolderPage com uma grid carregando os dados do arquivo DBF para edição.

O problema é que são vários arquivos e podem ser apenas 15 ou serem 25 ou até mais, para eu criar N oFolderPages e esconde-los ficaria enviavel, por isso gostaria de de acordo com a quantidade de arquivos alocar dinamicamente esses objetos na memória, um de cada vez.

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 1 mês atrás - 10 anos 1 mês atrás #25345 por kanaamlrr
Respondido por kanaamlrr no tópico ALOCAÇÃO DINÂMICA DE MEMÓRIA
Entendi!
Interessante essa demanda.
Vou dar uma olhada aqui e te retorno com algo ok?
Só uma dúvida, você está utilizando o objeto TFolder?
Ultima edição: 10 anos 1 mês atrás por kanaamlrr.

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 1 mês atrás - 10 anos 1 mês atrás #25348 por kanaamlrr
Respondido por kanaamlrr no tópico ALOCAÇÃO DINÂMICA DE MEMÓRIA
Então, como eu faria isso.
Primeiramente eu declararia alguns arrays que irão armazenar os elementos básicos para a criação da tela, por exemplo:
Local   aAux     := {}
Private aHeaders := {} //array onde estarão os aHeader de todos os folders
Private aCols    := {} //array onde estarão os aCols de todos os folders
Private aArqs    := {} //array contendo os nomes dos arquivos dbf

//aqui ocorre o preenchimento do aArqs com os arquivos dbf
//verificar como esses arquivos serão capturados

//Em seguida realiza um Loop no array contendo os arquivos para a geração dos aCols e aHeaders para cada um dos msNewGetDados

For i:= 1 To Len(aArqs)
   aAux := {}
   //verificar de onde serão puxadas as informações do aHeaders (quais tabelas do SX3)
   //exemplo:
   SX3->(dbSetOrder(1))
   SX3->(dbSeek(aArqs[i]))
   While SX3->X3_Arquivo == aArqs[i] .And. !SX3->(EOF())

      If X3Uso(SX3->X3_Usado)    .And.;                            // O Campo é usado.
         cNivel >= SX3->X3_Nivel                            // Nivel do Usuario >= Nivel do Campo.


         AAdd(aAux, {Trim(SX3->X3_Titulo),;
                        SX3->X3_Campo       ,;
                        SX3->X3_Picture     ,;
                        SX3->X3_Tamanho     ,;
                        SX3->X3_Decimal     ,;
                        SX3->X3_Valid       ,;
                        SX3->X3_Usado       ,;
                        SX3->X3_Tipo        ,;
                        SX3->X3_Arquivo     ,;
                        SX3->X3_Context})
		
      EndIf
	
      SX3->(dbSkip())
	
   EndDo
   aAdd(aHeaders,aAux) //aqui adiciona o aHeader de cada folder no aHeaders, garantindo que o aHeaders[1] terá toda a estrutura do aHeader do msNewGetDados do seu folder 1
Next i

Será necessário utilizar esse tipo de estrutura para o aCols também.

Na hora de montar o seu dialog, você deverá fazer um Loop utilizando o AddItem da classe TFolder, dessa forma você consegue ter folders dinâmicos.
E dentro de cada tFolder, você vai precisar criar um MsNewGetDados.
Ela terá que retornar um objeto, então você poder utilizar a seguinte estrutura:
Private aGetDados := {}
//aqui inicia o dialog
oTFolder := TFolder():New( 0,0,{},,oDlg,,,,.T.,,260,184 )
For i := 1 To Len(aArqs)
   oTFolder:AddItem("Nova Aba", .T.)
   &("oEnc"+aArqs[1])) := MsNewGetDados():New(nSuperior,nEsquerda,nInferior,nDireita, nOpc,cLinOk,cTudoOk,cIniCpos,aAlterGDa,nFreeze,nMax,cFieldOk, cSuperDel,cDelOk, oTFolder:aDialogs[i], aHeaders[i], aCols[i])
   aAdd(aGetDados, &("oEnc"+aArqs[1]))//considerando que na posição 1 tenha o nome da tabela
Next i

//aqui finaliza o dialog

Ficaria algo mais ou menos do tipo.
Precisa evoluir algumas coisas, mas acho que já dá para você ter uma ideia de por onde começar.
Quaisquer dúvidas vai postando ai que eu vou ajudando assim que der
Abraço!!
Ultima edição: 10 anos 1 mês atrás por kanaamlrr.

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 1 mês atrás #25357 por rafhapalles
Respondido por rafhapalles no tópico ALOCAÇÃO DINÂMICA DE MEMÓRIA
Poxa, realmente eu desconhecia esse método AddItem da classe TFolder, sou novo em ADVPL venho do Delphi e Java e estava reinvetando a roda, agradeço a ajuda que foi de estrema valia para a solução da minha demanda.

Por profissionais como vc é que esse site pode ser considerado MASTER.

Att,
Rafhael Vianna Palles

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.150 segundos
Joomla templates by a4joomla