Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - gusman

#21
.NET (C#, VB.NET, ASP) / Re: Problema con C#
5 Noviembre 2007, 00:24 AM
Buenas.

También puedes crear una referencia al form de origen para poder acceder a sus controles, por ejemplo:

Código (csharp) [Seleccionar]
public partial class Form1 : Form
{

    //controles, variables y genas varias blablabla

    internal DataGridView dataGridView1;

    void mostrar_form2()
    {
           Form2 frm = new Form2();
           frm.parent = this;
           frm.ShowDialog();
    }


}

public partial class Form2 : Form
{

    //controles, variables y genas varias blablabla
   
    internal Form1 parent;

    void cerrarform()
    {
           parent.dataGridView1.Refresh(); //o update o lo que tengas que hacer
           this.close();

    }


}


Fíjate que en el form1 he definido el dgv como internal, es para que haya acceso entre los módulos de la misma aplicación; si los controles los metes desde el diseñador cámbiales la propiedad Modifier a internal.

Lo bueno de este sistema es que dispones todavía de los datos del Form2 cuando vas a refrescar, y pueden ser útiles para hacer distintas cosas dependiendo del contenido del interfaz.

Un saludo.
#22
.NET (C#, VB.NET, ASP) / Re: Lockbits ???? AYUDA
5 Noviembre 2007, 00:09 AM
Buenas.

Veo que lo que te interesa son rutinas de dibujado rápidas para poder crear efectos.

Si quieres usar LockBits tengo en mi Web un ejemplo de como se usa, para poder copiar imágenes mediante CopyMemory y también desde ensamblador directo ( :O ).

Te adelanto que el LockBits lo que hace es fijar una zona de memoria de la imagen y nos devuelve el puntero a la dirección del primer scanline.

Si no sabes lo que es un scanline ni el stride de este mira en mi web, ahí lo explico.

Otra solución puede ser utilizar unas matrices de transformación para:
1-Eliminar los píxeles de color blanco (o el color que elijas)
1-Redibujar la imágen con el color eliminado y aplicando una matriz de transformación de color que la vaya haciendo transparente.
#23
Aquí va una función para dibujar imágenes con un alpha definido por la aplicación:

Código (csharp) [Seleccionar]


using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;

namespace DrGusman
{

    class AlphaRenderer
    {

        public static void DrawAlphaImage(Graphics Target,Rectangle TargetRectangle, Image Source, Rectangle SourceRectangle,float Alpha)
        {

            float[][] colorMatrixPoints = new float[][] {

                new float[]{1, 0, 0, 0, 0},
                new float[]{0, 1, 0, 0, 0},
                new float[]{0, 0, 1, 0, 0},
                new float[]{0, 0, 0, Alpha, 0},
                new float[]{0, 0, 0, 0, 1}

            };

            ColorMatrix cm = new ColorMatrix(colorMatrixPoints);

            ImageAttributes imgAttr = new ImageAttributes();
            imgAttr.SetColorMatrix(cm);

            Target.DrawImage(Source, TargetRectangle, SourceRectangle.X,
            SourceRectangle.Y, SourceRectangle.Width, SourceRectangle.Height,
            GraphicsUnit.Pixel, imgAttr);

            imgAttr.Dispose();

        }

    }

}



Si quieres ver más códigos útiles mira en mi web, www.drgusman.info.

Un saludo.
#24
Hmmm, a ver, creo que tu lo que estás intentando hacer es que desde un programa se pueda controlar si hay conexión a internet o no, ¿¿correcto??.

Si es así lo vas a tener un poco dificil, "Internet" no es algo que puedas poner y quitar, internet llega a cada máquina de una forma:un adaptador de red, un adaptador de telefonía, un puerto COM..

Para poder controlar todo esto lo tienes un poco dificil ya que cada Hardware trabaja de una forma.

Puedes recurrir a soluciones que envuelvan las capas de red, quizá bloqueando el protocolo IPv4 y el IPv6 puedas controlar el flujo de paquetes, pero dudo mucho que lo puedas hacer en .net, para esto lo más normal sería escribir un filtro intermedio que viene a ser un driver que se coloca entre los adaptadores de red y las capas de protocolos; el problema es que es muy dificil y has de hacerlo en C puro y usando el SDK de Windows.

Otra solución posible es acceder al IPSEC si la plataforma a la que está orientada la aplicación lo soporta y crear un par de reglas que bloqueen por completo la conexión a internet, el único problema que tienes con este método es que el usuario podría acceder manualmente a esa configuración, por lo cual tendrías que estár comprobando cada poco tiempo si esa regla aún existe. Lo bueno de este sistema es que sí podrías hacerlo en .net, realizando llamadas al api de WFP (mas info aquí).

Una última forma que se me ocurre de hacer esto es utilizar la librería IPHelper para controlar las conexiones TCP de la máquina; mediante estas funciones puedes enumerar las conexiones TCP de la máquina y cerrarlas cuando se produzcan, el único problema que tiene esto es que si se intenta usar internet por otro protocolo que no sea TCP se podría realizar la conexión. Si quieres saber más sobre IPHelper mira aquí.

Un saludo.

El Dr. Gusman.
#25
Quita ese filtro y pon el Splitter en vez de él.