- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- ALOCAÇÃO DINÂMICA DE MEMÓRIA
×
Linguagem de Programação ADVPL
Perguntas ALOCAÇÃO DINÂMICA DE MEMÓRIA
- rafhapalles
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 9
- Obrigados Recebidos: 0
10 anos 2 meses atrás #25336
por rafhapalles
ALOCAÇÃO DINÂMICA DE MEMÓRIA foi criado 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.
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.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
- rafhapalles
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 9
- Obrigados Recebidos: 0
10 anos 2 meses 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.
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.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
10 anos 2 meses atrás - 10 anos 2 meses 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?
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 2 meses atrás por kanaamlrr.
Por favor Acessar ou Registrar para participar da conversa.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
10 anos 2 meses atrás - 10 anos 2 meses 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:
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:
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!!
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 2 meses atrás por kanaamlrr.
Por favor Acessar ou Registrar para participar da conversa.
- rafhapalles
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 9
- Obrigados Recebidos: 0
10 anos 2 meses 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 profissionais como vc é que esse site pode ser considerado MASTER.
Att,
Rafhael Vianna Palles
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- ALOCAÇÃO DINÂMICA DE MEMÓRIA
Tempo para a criação da página:0.112 segundos