Вы находитесь на странице: 1из 9

28/10/2015

crearclasesendelphiForosClubDelphi

FTP

CCD

ForosClubDelphi>Principal>Varios
crearclasesendelphi
Registrarse

FAQ

Miembros

Buscar

Trucos

Contrasea

Foros

Calendario

IniciarSesin

Guadeestilo

Herramientas

TemasdeHoy

BuscarenTema

Desplegado

#1

22042006

Registrado:Nov2005
Posts:14

Miembro

Trabajo

NombredeUsuario NombredeUsuario Recordarme?

alextmb

crearclasesendelphi

holaamigosdeclubdelphi.comnesecitodesuayuda,ojalayalguienpudieraproporcionarmeunejemplode
comocrearunaclaseentiempodeejecucionendelphiyrespondersiPuedocrearclasescomosifueraun
arreglo?.
Necesitocrear20clasessimilares.DeantemanoGracias

#2

22042006

Sinaloense
Miembro

Registrado:Oct2003
Posts:139

Nosepuedencrearclases,loquesehaceesinstanciarobjetos.

#3

22042006

dec
Moderador

Registrado:Dec2004
Ubicacin:Alcobendas,Madrid,Espaa
Posts:12.025

Hola,
Aversinosentendemos.
Unaclaseesunaclase,yunobjetoesunobjeto.Unobjetoeslainstanciadeunaclase.Unaclaseescomoun
moldedeunobjeto.Notienesquecrearveinteclases(creo),sinoquetienesquecrear20objetosdeuna
determinadaclase.
CmoseinstanciaunaclasedeobjetoenDelphi?Cmosecreanobjetosdeunaclase?Mediantelos
constructoresconquecadaclasecuenta,quenosonsinounosmtodos"especiales"queinicializanvariables,
preparanunobjeto,enfin,deunadeterminadaclase.
Sucontraparteestenlos"destructores",queseutilizanparaliberarmemoria,porejemplo,oparacualquier
otratareaquehubieraquellevaracabocuandosedestruyeundeterminadoobjetodeciertaclase.
Perocmocreasunobjeto,demonios?Teestarspreguntando.Nosoyyoelmsindicadoparaestaraqu
ahoraescribiendoesto,sinmodestialodigo,pero,endefinitiva,tendrsquefijarteenelconstructoro
constructores(porquepuedehabermsdeuno)delaclaseencuestin,parasabercmotienesquetratarcon
ello.
http://www.clubdelphi.com/foros/showthread.php?t=30889

1/9

28/10/2015

crearclasesendelphiForosClubDelphi

Unejemplo?Deacuerdo.Creemosunainstanciadelaclase"TEdit",porejemplo,quesabesqueesuncontrol
visualdelosquevienenenlapestaa"Standard"delapaletadecomponentesdeDelphi.
Dndeseencuentradefinidalaclase"TEdit"?Enlaunidad"StdCtrls"(deStandardControls).Puesbien,lo
primeroserarequeriresaunidad,parapodertrabajarconlaclase"TEdit",yasabes:
CdigoDelphi[]
uses
StdCtrls;

Ahoratendremosquebuscarleunhogaralainstanciadelobjetoquequeremoscrear.Digamosqueuna
variabledeltipodeobjetoquequeremoscrearnospuedevenirbien.Asquedeclaremosunavariabledeese
tipoendondesea...bueno,endondeseaquenoshagafalta,porejemplo,supongamosquevamosautilizarun
objeto"TEdit"quecrearemosentiempodeejecucinenunformulario:
CdigoDelphi[]
unitUnit2;
interface
uses
Forms,StdCtrls;
type
TForm2=class(TForm)
private
MiEdit:TEdit;//aquestoy
end;
var
Form2:TForm2;
MiEdit:TEdit;//oaqutambin
implementation
{$R*.dfm}
var
MiEdit:TEdit;//inclusoaqu
end.

Veslavariable"MiEdit"declaradaenlaseccin"private"delaclase"TForm2"?Tambinvescmopudimos
declararlafueradelaclase"TForm2",enlaclusula"interfaz"delaunidadquecontieneelformulario,e
inclusopudimosdeclararlaenlaclusula"implementation".
Igualmentepodramoshaberladeclaradodentrodeunprocedimiento,funcinomtodo.Porejemplo,imagina
quedentrodelaclusula"implementation"delaunidadanteriortuviramosalgoas:
CdigoDelphi[]
procedureTForm2.Button1Click(Sender:TObject);
var
MiEdit:TEdit;
begin
http://www.clubdelphi.com/foros/showthread.php?t=30889

2/9

28/10/2015

crearclasesendelphiForosClubDelphi

end;

Estaramosdeclarandounavariablecapazdecontenerlareferenciadeunobjetodelaclase"TEdit"dentrodel
mtodo"Button1Click",enestecaso.
Muybien.Perocmocreoelobjeto?Vamosaello.Sigamosconlavariablequedeclaramosenelmtodo
susomentado.Ascreamosunainstanciadelaclase"TEdit":
CdigoDelphi[]
procedureTForm2.Button1Click(Sender:TObject);
var
MiEdit:TEdit;
begin
MiEdit:=TEdit.Create(Self);
MiEdit.Parent:=Self;
MiEdit.Free;
end;

Vamosporlneas.Primerohacemosusodelconstructordelaclase"TEdit",elcualnospidecomoparmetro
uncomponente"propietario"paraelobjeto"TEdit"quequeremoscrear.Nosotrosledamoscomopadreel
"Form2",esdecir,comosabes,lavariable"Self"contieneunareferenciaalobjetoencuyomtodoestamos
trabajando,queenestecasoes"Form2".Elpropietariodel"TEdit"seencargardeliberarlamemoriaocupada
conesteensudestruccin,enladelpropietariomismo,aunquenosotrospodemosencargarnosdeesatarea
tambinpornuestracuenta.
Elobjeto,apartirdeah,estyaenmemoria,vivitoycoleando,pero,noleveramossinofueraporla
siguientelnea.Este"TEdit"esmuysuyo,y,comootroscontrolessimilares,ademsdeun"propietario"nos
solicitaun"padre".Escomosinospreguntara,"estbien,aquestoy,pero,dndequieresquememuestre?"
Ynosotroslerespondiramosconlasmismas,enelmismoformulario,ydejayadeserpesadoymustrate
ya!
Yel"TEdit"obedientesemuestra...puesnofaltabams!
Perounainstruccinmsabajo,oh,amigo,lavidaesas,destruimosel"TEdit",liberamossumemoriay
adis,ahtepudras.Porqueyanonoshacafalta,naturalmente.Deotromodopodramosseguirusndolo
hastacuandohubiramosquerido.
Diferenciasentredeclararlavariable"TEdit"enlaclasedelformulario,enlaclusula"interface",enla
clusula"implementation"oenelprocedimiento,comohemoshecho?Bueno.Esoparaotrapregunta,queya
estoyviendoquemeestoyenrollandodemasiadoconesta,ynosyohastadndevamosallegar...
Pero...casisemeolvida!Tquerascrearveinteclases,digoobjetos!Deunatacada!(?)Yentiempode
ejecucin!Vaderetro!Bueno.Puescomocasicontodoenestodelaprogramacin,habrvariasformasde
enfocarlascosas,yenpartetienequeverqupretendemosconseguir.
Siteexplayasunpocomsenloquenecesitas,talvezalguienpuedaofrecertemsinformacin.Yotedira
responderaquepuedescrearunarreglodelos"TEdit"(seguimosconelejemplo),opuedesutilizaruna
variablequecontenga(ovayaconteniendo)los"TEdit"quenecesites...nosqudecirte,porquetampocos
qunecesitasrealmente.
Aqutedejoalgodecdigoescritoavuelapluma,queseguramentecontengaerrores,perotalvezpuedadarte
algunaidea.Seadmitensugerenciasatodashorasdelunesaviernesysbadosyfestivosquenoseande
guardar.
CdigoDelphi[]
http://www.clubdelphi.com/foros/showthread.php?t=30889

3/9

28/10/2015

crearclasesendelphiForosClubDelphi

uses
Contnrs;//ContienelaclaseTObjectList
var
//Unarraypreparadoparacontener20TEdit
FEditsA:array[0..19]ofTEdit;
procedureTForm1.Button1Click(Sender:TObject);
var
i:integer;
begin
Randomize;
fori:=0toHigh(FEditsA)do
begin
FEditsA[i]:=TEdit.Create(Self);
FEditsA[i].Parent:=Self;
FEditsA[i].SetBounds(Random(Self.Width100),
Random(Self.Height20),100,20);
end;
end;
var
FEditsB:TObjectList;
procedureTForm1.Button2Click(Sender:TObject);
var
nEdit:TEdit;
begin
nEdit:=TEdit.Create(Self);
nEdit.Parent:=Self;
Randomize;
nEdit.SetBounds(Random(Self.Width100),
Random(Self.Height20),100,20);
ifnotAssigned(FEditsB)then
FEditsB:=TObjectList.Create;
FEditsB.Add(nEdit);
ShowMessage(Format('EditsenFEditsB:%d',[FEditsB.Count]));
end;
procedureTForm1.FormDestroy(Sender:TObject);
begin
FEditsB.Free;
end;

Nocomentoelcdigoporquecreoquemsomenospodrentenderse,yporqueyamehecansadounpocode
aporrearlasteclas...peropuedescomentarloqueteparezcadelmismo,queaquestaremosencuanto
hayamosdescansadounpoco.
__________________
DavidEsperalta
www.davidesperalta.com

#4

22042006

alextmb
Miembro

Registrado:Nov2005
Posts:14

errordeescritura

perdonesquenomedihaentenderenmiprimermensaje,soynovatoycomoquemeenredounpocoal
explicarme,perosiporainvamiduda,loquenesecitohacerescrearunaclaseyenesaclasetengoque
crear20imageconelcodigoquemehasdadomeexplicamuchascosa,perotambienmeabrealgunasdudas.
http://www.clubdelphi.com/foros/showthread.php?t=30889

4/9

28/10/2015

crearclasesendelphiForosClubDelphi

queesloquehacelalinea?
CdigoDelphi[]
MiEdit.Free;

yqueaqueserefiereutilizandolapalabraself?
porresolvermisdudasyescribirtantogracias.

#5

23042006

dec
Moderador

Registrado:Dec2004
Ubicacin:Alcobendas,Madrid,Espaa
Posts:12.025

Hola,
Cita:

perdonesquenomedihaentenderenmiprimermensaje,soynovatoycomoquemeenredounpoco
alexplicarme,perosiporainvamiduda,loquenesecitohacerescrearunaclaseyenesaclase
tengoquecrear20image(...)
Bueno.Alomejoresquenosotrosnoshemosempeadoenverlodelamaneraenquenoera...Ahoracreo
comprendermsomenosaloqueterefieres.Luegoluegoteexplicarporqudigoquelogrocomprenderlo
msomenos.
Cita:

queesloquehacelalinea?
CdigoDelphi[]
MiEdit.Free;

Bueno,segnlaayudadeDelphi"Free"esunmtododelaclase"TObject"(delaquedesciendentodoslos
objetosenDelphi,directaoindirectamente)quesirvepara:
Cita:

EmpezadoporAyudadeDelphi
Destroysanobjectandfreesitsassociatedmemory,ifnecessary.
Cita:

yqueaqueserefiereutilizandolapalabraself?
Setratadeunidentificadorque"poneDelphi"para...
Cita:

EmpezadoporAyudadeDelphi
Withintheimplementationofamethod,theidentifierSelfreferencestheobjectinwhichthemethodis
called.

http://www.clubdelphi.com/foros/showthread.php?t=30889

5/9

28/10/2015

crearclasesendelphiForosClubDelphi

Ahora,siteparece,vamosalodeporqudecaquecomprendomsomenosloquequieresdecircuando
dicesquequierescrearunaclasequecontenga20"TImage"(supongoqueterefieresaobjetosdelaclase
"TImage"cuandohablasdeimgenes).
Yonosoymuybuenoenlaprogramacinorientadaaobjetos(bueno,enrealidadenningnparadigmade
programacin,pero,noestoyaquahoraparaquejarme).Loquesemeocurreesqueparaloquequieres
hacerhabrmsdeunasolucin,msdeunposiblecaminoqueandar.
Usarstodaslasimgenesdesdeunprincipio?Setrata,porelcontrario,deiraadiendoimgenessegn
seanecesario,peroesposiblequenuncasellegueallmitede20imgenes?Sonpreguntasqueseme
ocurren,porque,tengomisdudassobreloquepretendesconseguir.
Sitehasfijadoenelcdigodearribasemuestraunaformadecrearun"Array"capazdecontenerveinte
"TEdit":lomismopodracontener"TImage",comopuedessuponer.Tambinsemuestraenelcdigodearriba
cmopuedencrearse"TEdit"ysevanaadiendoenunavariabledetipo"TObjectList"(teremitoalaayudade
Delphisobreestaclase).
Bueno.Pueslomismoquesedeclarunavariable"Array"yunavariable"TObjectList"enlasclsulas
"interface","implementation",dentrodelaclase"TForm2"ydentrodeunmtododeestaltimaclase,nadate
impidedeclararvariablesdeesascaractersticasdentrodeladeclaracindetupropiaclase,delaqueests
llevandoacabo.
Nos.Intuyoquetantoatiyamnoshacenfaltaunpardehervoresencuantoaprogramacinorientadaa
objetosserefiere,entreotras,porqueyapuestos,porquno.Yamedirsqusacasenclarodetodoeste
rolloquehesoltado.
__________________
DavidEsperalta
www.davidesperalta.com

#6

23042006

[Lepe]
MiembroPremium

Registrado:May2003
Posts:7.364

Despuesdelaextensa,eXtupendayamenaexplicacindeDec,solomequedaaadirqueYousaraun
TObjectListporcomodidad(notienesqueestablecerloslmitesnimodificarlosalaadirobjetos,sehacesolo,
ademspermiteordenarlosobjetosysobretododestruirlosdeunaformamuyfaciltodosdeunasolatacadao
biendestruirunosolo)ytambienporquequedauncdigomslimpio.
TambienteremitoalaBsquedadelosforosendondesehahabladomuchosobrelosTObjectList.
CdigoDelphi[]
varL:TobjectList;
i:Integer;
begin
L:=TobjectList.Create(true);//aldestruirlalistasedestruyentodos
fori:=0to2000do
begin
L.Add(Tedit.Create(Self);//locreoyloaadoalalista
Tedit(L.items[i]).Parent:=self;accedoalobjetoatravsdelalista.Sinusarvariables
end;
Sleep(3000);
Freeandnil(L);//liberolalistaytodoslosEditsdeunatacada.
end;

Saludos
__________________
Siustedentendimicomentario,contctemeygustosamente,
selovolveraexplicarhastaquenoloentienda,Gracias.
http://www.clubdelphi.com/foros/showthread.php?t=30889

6/9

28/10/2015

crearclasesendelphiForosClubDelphi

#7

24042006

Alcolea
Miembro

Registrado:Apr2006
Ubicacin:SantiagodeCuba,Cuba
Posts:100

LasclasesylosobjetosenDelphi

Holaaatodos:
Meentusiasmaeltemayvoyametermicuchareta.Terecomiendoencarecidamentequeleas"LaCaraoculta
deDelphi4"apartirdelapgina127dondecomienzaaexplicartodolorelacionadoconlaPOO,osea,la
creacindeclases,lasrelacionesqueexistenentreunasyotrasatravsdelaherenciaytodounconjuntode
cuestionesqueesprecisodominarparaenredarseconeltemademaneraapropiada.
Comoyaalguienteexpliclasclaseslaspudierasvercomo"moldes"quedefinenelcomportamientodetodos
losobjetosqueseinstansiendeella,puedesveratodoslosbotonesdetuaplicacincomo"variables"
pertenecientesaltipoTButton.
Unejemplosencillo:
Unaclaseparamanejarempleados(estolovienunlibroylomodifiqu,noestcompletoperoteayudar)
TEmpleado=Class
private
Nombre:String
Cargo:String
FechaIng:Date
Salario:Real
{Enlaseccinprivatehedeclaradolosatributosdelaclase,algoascomolaspropiedadesquecaracterizaran
acadaempleado,sipiensashacerunaclaseparamanejargrficosquizsdebasdeclararcomounodelos
atributosdeestaunobjetoCanvas.Todoloquesedeclareenlaseccinprivatenopodrseraccedidodesde
otraUnit,anoseratravsdealgnmtododelaclasedestinadoalefecto}
public
constructorCreaEmpleado(ANombre,ACargo:StringAFechaIng:DateSalario:Real)
{Elconstructor,comoteexplicaronesun"mtodoespecial"quehaceloqueyatedijeron,yquepuedehaber
variosdentrodeunaclaseyaqueunobjetopuedecrearsedevariasformas,digamosquepuedescargarlo
desdelosdatosguardadoseneldiscoduroocrearlodesdeceroentiempodeejecucin,opuedesno
implementarunconstructorsinoesnecesarioyaquetodaslasclasestieneunopredefinidollamadocreateel
cualinicializatodoslosvalores,delaclasequeseaqueestscreando,desdecero,esdecir,siesunvalor
lgicocomienzacomofalsesiesentero,encerounaenumeracin,porelprimervalordelaenumeracin
unastring,conlacadenavacaetc.}
procedureSetNombre(ANombre:String)
procedureSetNombre(ACargo:String)
procedureEliminarEmpleado
procedureCalcularAumento
end
{Ademsdelconstructortendrsquedeclararlosmtodosdetuclase,yestounadelascosasquemarcala
diferenciaentreunregistroyunobjeto,losobjetosllevanencapsuladosdentrodesilasfuncionesquehacen,
quierodecirquedondequieraquelollameslepuedesaplicaralempleadoqueseaelmtodoparacalcularel
aumentodelamismamaneraquealobjetoEdit1leaplicaselmtodoClearparaborrareltexto(Edit1.Clear)(
Empleado1.CalcularAumento),nosabemosquelneasdecdigotieneelmtodoClearperofunciona,despus
quehagastuclasenoteacordarsquefueloquepusisteacadamtodoperosilahicistebiennoteharfalta
recordarlo,sololamaselmtodoyyaest}
implementation
http://www.clubdelphi.com/foros/showthread.php?t=30889

7/9

28/10/2015

crearclasesendelphiForosClubDelphi

{Acenlaimplementacinesdondeseponeacadamtododeclaradoelcdigoejecutablequetendr.
Observaquedelantedelnombredecadamtodoseponeelnombredelaclasealaquepertenece,puessi
implementasmasdeunaclaseenlaUnitnoindicaraqueclaseperteneceelmtodopuedetraerproblemas
porloqueestoesobligatorio}
procedureTEmpleado.SetNombre(ANombre:String)
begin
Nombre:=ANombre
end
procedureTEmpleado.SetNombre(ACargo:String)
begin
Cargo:=ACargo
end
////////////////////////////////////////////////////////////////////
Cmoutilizarlaclase?...delamismamaneraqueutilizaslasclasesqueyaexisten,declararlosobjetos
instanciasdelaclasedelasvariadasmanerasqueyateexplicaronynoolvidarllamaraalgunodelos
constructoresposiblesparadarlevidaalosobjetos,solodespusdecreadospodrsaplicaralgunosdelos
mtodos.
Esperoquetepuedaservirdealgomiexplicacin
Micorreoruben06175@scu.jovenclub.cu

TemaAnterior|PrximoTema

NormasdePublicacin
noPuedescrearnuevostemas
noPuedesresponderatemas
noPuedesadjuntararchivos
noPuedeseditartusmensajes
ElcdigovB esthabilitado
Lascaritasestnhabilitado
Cdigo[IMG]esthabilitado
CdigoHTMLestdeshabilitado

SaltaraForo
Varios

Ir

TemasSimilares
Tema

Autor

Foro

Clasesderivadas

kolotoure

Varios

ClaseseInterfaces

Virata

OOP

Clasesdetransacciones.

mlara

ClasesForms
ClasesdeOrgasmo

Respuestas

ltimomensaje

0112200422:43:31

14

0709200411:10:15

FirebirdeInterbase

1607200301:50:31

lafirma

OOP

0107200320:48:12

OmarAlejandro

Humor

0505200321:52:12

LafranjahorariaesGMT+2.Ahorasonlas02:42:48.

Espaol3.6.7

http://www.clubdelphi.com/foros/showthread.php?t=30889

ContactarconNosotrosClubDelphiArchivoTop

8/9

28/10/2015

crearclasesendelphiForosClubDelphi
PoweredbyvBulletinVersion3.6.8
Copyright20002015,JelsoftEnterprisesLtd.
TraduccinalcastellanoporelequipodemoderadoresdelClubDelphi
Inicio|Contacto|Foros|Noticias|Trabajo
Copyright19962007ClubDelphi

http://www.clubdelphi.com/foros/showthread.php?t=30889

9/9

Вам также может понравиться