Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

 
 
Herramientas Buscar en Tema Desplegado
  #4  
Antiguo 09-02-2017
Avatar de JoAnCa
JoAnCa JoAnCa is offline
Miembro
 
Registrado: jul 2005
Ubicación: Cuba
Posts: 438
Poder: 21
JoAnCa Va por buen camino
Pues esto es lo que yo tengo hasta ahora, pero la seleccion no me funciona bien, y lo de guardar las posiciones lo resolvere con el TSaveComps

Código Delphi [-]
//----- Crear el Control -----
procedure TfrmPrincipal.CrearNodo(Sender: TObject);
begin
  Randomize;
  //--- Crear el TsImage ---
  imgDisp:=TsImage.Create(tshMapaRed);
  with imgDisp do
  begin
    Parent:=tshMapaRed;
    Top:=80;
    Left:=140;
    AutoSize:=True;
    Images:=imgListDisp;
    if TipoMapa = 'Redes' then ImageIndex:=1
    else ImageIndex:=DataMod.fdtDispositIDTIPODISP.Value;

    OnMouseDown:=ControlMouseDown;
    OnMouseMove:=ControlMouseMove;
    OnMouseUp:=ControlMouseUp;
    OnClick:=ControlClick;

    //--- Crear y asociar la etiqueta ---
    lblDisp:=CrearLabelAsociada(imgDisp, TitDisp);
    imgDisp.Hint:=lblDisp.Name;
  end;
end;

La etiqueta la creo de esta forma:
Código Delphi [-]
function TfrmPrincipal.CrearLabelAsociada(AImage: TImage; Titulo: string):TLabel;
var
  lbl :TLabel;

begin
  lbl:=TLabel.Create(Self);
  with lbl do
  begin
    Name:='lblRed'+IntToStr(DataMod.fdtRedesIdRed.Value);
    Parent:=AImage.Parent;
    Left:=AImage.Left;
    Top:=AImage.Top + AImage.Height + 2;
    Caption:=Titulo;
    Alignment:=taCenter;
  end;
  Result:=lbl;
end;

Para moverlo, lo hago con estos procedimientos
Código Delphi [-]
procedure TfrmPrincipal.ControlMouseDown( Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer );
begin
  CompCorX:=X;
  CompCorY:=Y;
  CompMoviendo:=True;
  TMovible(Sender).MouseCapture:=True;
end;

procedure TfrmPrincipal.ControlMouseMove( Sender: TObject; Shift: TShiftState; X, Y: Integer );
begin
  if CompMoviendo then
  begin
    TImage(Sender).Left:=TImage(Sender).Left - (MouseDownSpot.x - x) - 24;
    TImage(Sender).Top:=TImage(Sender).Top - (MouseDownSpot.y - y) - 24;

    //--- Mover la etiqueta asociada ---
    lblDisp:=TLabel(FindComponent(TImage(Sender).Hint));
    lblDisp.Left:=TImage(Sender).Left ;
    lblDisp.Top:=TImage(Sender).Top ;
    lblDisp.Top:=TImage(Sender).Top + TImage(Sender).Height + 2;
  end;
end;

procedure TfrmPrincipal.ControlMouseUp( Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer );
begin
  if CompMoviendo then
  begin
    CompMoviendo:=False;
    TMovible(Sender).MouseCapture:=False;
  end;

  if (Sender is TImage) then imgSelect:=TImage(Sender);
end;

Lo elimino asi
Código Delphi [-]
//----- Eliminar el Nodo -----
procedure TfrmPrincipal.btn2Click(Sender: TObject);
 var
  i :Integer;

begin
  if Assigned (imgSelect) then
  begin
    // Borrar el TLabel asoaciado
    for i:=ComponentCount - 1 downto 0 do
    begin
      if Components[i] is TLabel then
        if Components[i].Name = imgSelect.hint then
        begin
          Components[i].Free;
          Break;
        end;
    end;
    FreeAndNil(imgSelect);
  end;
end;

Y para seleccionarlo parece que algo me falta o no es el metodo adecuado, lo que intento es ponerle un TShape transparente para que quede alrededor del control, pero no funciona del todo bien.
Código Delphi [-]
//----- Resaltar el Control Seleccionado -----
procedure TfrmPrincipal.ControlClick(Sender: TObject);
begin
  if Assigned (imgSelect) then
  with shpSelect do
  begin
    Visible:=True;
    Top:=PosCur.X-1;
    Left:=PosCur.Y-1;
  end;
end;

Lo que sucede es que tengo que dar clic dos veces para que me muestre el TShape en el Nodo seleccionado, por ejemplo:
1ra situación:
Doy un clic y no sucede nada, doy otro clic y me muestra el TShape correctamente

2da situación:
Doy un clic en un nodo y no sucede nada, doy un clic en otro nodo y el TShape se me ubica en el nodo anterior

Al dar un clic parece que el nodo se asigna bien, porque al darle eliminar se elimina al que le di un clic, pero no sucede nada con la ubicacion del TShape

Alguna idea de lo que estoy haciendo mal?
Como podria arreglar eso?


Cita:
Empezado por neftali
No es por no hacerlo, pero creo que se "rompe" con la idea del componente.
De todas formas, no se si una solución podría ser crear un Frame con una imagen y un Label (por ejemplo) y seleccionar el frame para moverlo, cosa que no te debería dar ningún problema.
Aunque no lo he probado, no se si me sirva con un Frame, pues necesito que las imagenes tengan fondo transparente, y si el nombre de la etiqueta fuese mas largo que el ancho del frame, quizas ma la trunque
__________________
La hora de acción no es hora de aprender, es necesario haber aprendido antes

Última edición por JoAnCa fecha: 09-02-2017 a las 21:19:16.
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Peticion a Neftali sobre Componente kurono Varios 20 23-01-2011 10:05:18
Solicito ayuda de Neftalí JoAnCa Varios 2 20-03-2010 15:26:45
TSelectOnRunTime ACCESS VIOLATION DELPHI7 tuxtlagacse API de Windows 1 30-01-2007 11:08:45
No funcionan componentes TSelectOnRuntime cuando estan controles dentro de un panel gulder API de Windows 6 11-08-2006 09:58:50
Neftali Ayuda please! krilea Conexión con bases de datos 6 01-06-2006 15:41:22


La franja horaria es GMT +2. Ahora son las 00:18:55.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi