![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
ok magui, tu tienes que trabajar con el renderer de tu capa y de ahi escalarla, te mando el ejemplo de esto
Código:
procedure TForm2.bbuniClick(Sender: TObject);
var
a,breakVal,z : integer;
zaz : string;
begin
try
memo1.Clear;
recs:=l.Records;
l.Renderer:=nil;
l.Renderer:=ImoClassBreaksRenderer(CreateOleObject('MapObjects2.ClassBreaksRenderer'));
tdesc:=recs.TableDesc;
fields:=recs.Fields;
cbr:=ImoClassBreaksRenderer(l.Renderer);
cbr.Field:=tdesc.FieldName[cbx.ItemIndex];
if cbx.Text='' then
begin
showmessage('No Se Eligio Un Campo');
exit;
end;
strsUniqueValues:= IMoStrings(CreateOleObject('MapObjects2.strings'));
//fld := IMoField(CreateOleObject('MapObjects2.Field'));
fld := fields.Item(tdesc.FieldName[cbx.ItemIndex]);
except//if varisempty(fld) then
//begin
showmessage('Hay Un Error En La Tabla!!');
exit;
end;
z:=0;
recs.MoveFirst;
a:=1;
while (not recs.EOF) do
begin
strsUniqueValues.Add(fld.value);
recs.MoveNext;
inc(z);
if z = 100 then
begin
a:=application.MessageBox( 'USTED TIENE MÁS DE 100 VARIABLES UNICAS, DESEA CONTINUAR A PESAR DE QUE DILATE MUCHO EL PROCESO??', 'EXCEDENTE DE VARIABLES...', MB_OKCANCEL);
if a=2 then
exit; //se sale de la aplicacion
end; //fin if
end; //fin while
{a:=1;
if strsUniqueValues.Count > 100 then
a:=application.MessageBox( 'USTED TIENE MÁS DE 100 VARIABLES UNICAS, DESEA CONTINUAR??', 'EXCEDENTE DE VARIABLES...', MB_OKCANCEL);
if a=2 then
exit; //se sale de la aplicacion}
if (vmr=nil)then
vmr:= IMoValueMapRenderer(CreateOleObject('MapObjects2.ValueMapRenderer'));
vmr.SymbolType:=l.Symbol.SymbolType;
vmr.Field:=fld.Name;
vmr.ValueCount:=strsUniqueValues.Count;
vmr.UseDefault:=false;
for a:=0 to strsUniqueValues.Count-1 do
begin
vmr.Value[a]:=strsUniqueValues.Item(a);
// showmessage(strsUniqueValues.Item(a));
end;
memo1.Lines.Add(' LISTADO DE VALORES UNICOS!!');
memo1.Lines.Add(' ');
for a:=0 to vmr.ValueCount-1 do
begin
zaz:='';
zaz:=inttoStr(a+1);
zaz:=zaz+' '+vmr.Value[a];
memo1.Lines.Add(zaz);
end; //fin for llenado memo1
cbr.BreakCount:=strsUniqueValues.Count;
bbuni2.Enabled:=true;
end; //fin procedure
|
|
#2
|
|||
|
|||
|
gracias por el codigo..
lo he probado ..pero no me muestra el mapa con los colores asignados, me imagino que esta es la parte donde se cambia los colores.. if (vmr=nil)then vmr:= IMoValueMapRenderer(CreateOleObject('MapObjects2.ValueMapRenderer')); vmr.SymbolType:=l.Symbol.SymbolType; vmr.Field:=fld.Name; vmr.ValueCount:=strsUniqueValues.Count; vmr.UseDefault:=false; for a:=0 to strsUniqueValues.Count-1 do begin vmr.Value[a]:=strsUniqueValues.Item(a); // showmessage(strsUniqueValues.Item(a)); end; me gustaria que me expliques un poco mas que tengo que hacer para que funcione.. |
|
#3
|
||||
|
||||
|
aqui esta el código para los colores
Código:
procedure TForm2.bbuni2Click(Sender: TObject);
var
a,z,si : integer;
begin
if rb3.Checked then
begin
si:=application.MessageBox( 'ESTA USTED SEGURO DE QUERER PONER COLOR UNO A UNO A CADA CLASIFICACIÓN?? ','COLOR UNO A UNO...', MB_OKCANCEL);
If si = 2 Then
exit;
end;
if panel3.Visible=true then
cbr.RampColors(rcolor3.color,rcolor4.color);
l.Renderer:=nil;
if vmr.SymbolType = moFillSymbol then
for a:=0 to vmr.ValueCount-1 do
begin
if cboxuni.Checked then
begin
vmr.Symbol[a].Outline:=true;
vmr.Symbol[a].OutlineColor:=moblack;
end else
begin
vmr.Symbol[a].Outline:=false;
vmr.Symbol[a].OutlineColor:=vmr.Symbol[a].Color;
end;
if panel3.Visible=true then
vmr.Symbol[a].Color:=cbr.Symbol[a].Color;
///fin si es por rampa
if rb3.Checked then
begin
showmessage('ELIJA EL COLOR PARA EL VALOR '+vmr.Value[a]);
colores.Execute;
vmr.Symbol[a].Color:=colores.Color;
end;//fin si es color unico
end;//fin for
if l.shapeType = moShapeTypeMultipoint then
z:=0
else
z:=l.shapeType-21;
vmr.SymbolType:=z;
close;
{l.Renderer:=cbr;
form1.Map1.Refresh;}
l.Renderer:=vmr;
form1.Map1.Refresh;
form1.refresca_legend;
cbr:=nil;
vmr:=nil;
end; //fin procedure
Nota: si alguien sabe el comando para poner parrafos de referencia que ya hayan sido escritos se lo agradecaria mucho que me lo hiciera saber... saludos |
|
#4
|
|||
|
|||
|
gracias por el codigo torito...funciono bien..
solo tenia que aumentar esto al primer codigo que me enviaste: colores.Execute; vmr.Symbol[a].Color:=colores.Color; y al final... map1.refresh; saludos. |
|
#5
|
||||
|
||||
|
ok, de nada magui y siguele hechando muchas ganas...
|
|
#6
|
|||
|
|||
|
Hola
Soy nuevo en este tema, estoy trabajando con Delphy 5 y MO21, tengo un form con un Map y un legend, como hago para hacer el link entre estos componentes, si alguien me ayuda se lo agradezco de antemano. |
|
#7
|
||||
|
||||
|
te paso el código, pero no creo que te sirva de mucho si no sabes como se debe exportar el legend.... te recomiendo que leas todo el hilo para que sepas como exportarlo... saludos
Código:
procedure refresca_legend(); var imap:_dmap; intf:idispatch; loadit:wordbool; begin with form1 do begin imap:=map1.controlinterface; intf:=imap as idispatch; legend1.setmapsource(intf); loadit:=true; legend1.loadlegend(loadit); legend1.showalllegend; end; end; |
|
#8
|
|||
|
|||
|
Gracias por la respuesta, y tienes razon casi no entendi, leí los hiilos anteriores y me di cuenta que tengo que modificar el .pas del legend no se si me puedes enviar esas modificaciones, estoy trabajando con Delphy 5, de antemano muchisimas gracias.
![]() |
|
#9
|
||||
|
||||
|
ok, te lo adjunto a este comentario... saludos
|
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|