Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Duda En C#

Iniciado por Buffon, 19 de Abril de 2005, 07:39:45 PM

« anterior - próximo »

shephiroth

 Wenas.

Estoy mirando un poco.....y me he dado cuenta que llamas a un objeto equivocado. En vez de utilizar e.Graphics utiliza e.ClipRectangle.......este objeto (no se donde he leido q es de solo lectura, no se que te dejara hacer y que no >_<) tiene las propiedades .Location y .Size que puede que sean las q te den problemas. Usando el debug o con un print comprueba que seccion de la pantalla esta realmente dibujando.

Respecto a lo q comentaste antes del fallo, no te preocupes.....por eso dije si no crearia problema por otros lados......

Buffon

Cita de: "zupervaca"vamos a ver, invalidate genera un mensaje onpaint, pues claro para eso esta!!

debes de llamar a invalidate cada vez que MODIFIQUES el valor que quieres mostrar, NUNCA dentro de la funcion OnPaint

saludos
zuper no te mosquees pero no estás aportando nada a la conversación.

simplemente dices lo que ya he dicho yo anteriormente y de lo que estoy preguntando no respondes, simplemente afirmas cosas ya dichas.

Lo de que Invalidate genera una llamada a Onpaint lo he dicho yo en 4 mensajes de este mismo thread.

@Sephirot

Esa propiedad está muy bien ^^ dice todo los datos que la nueva ventana a pintar.

De todas maneras seguramente me rendiré, ya que era una prueba, el evento que registrará que se ha de volver a pintar no será por sacar la ventana fuera de pantalla y éste si que podrá hacer un Invalidate ^^.
------------------------

más que nada era por lo siguiente, queremos hacer un reloj digital.

si forzamos al metodo OnPaint a dibujar cada segundo con un simple sleep solo tendrá que recoger la hora y mostrarla.

y el codigo es mucho más sencillo que si nos declaramos un objeto "reloj" al cual le asignamos un evento de tiempo que hará un invalidate();

El primero es muy intuitivo y fácil de aprender.
El segundo como docencia es mucho más estricto, ya que enseña eventos bien y comunicación entre ellos.

pero weno, no os preocupeis yo sigo para adelante ^^

zupervaca

 ¿sabes lo que es el un evento timer? pues eso tienes que utilizar, y en cada evento timer haz un invalidate, mira que facil es

zupervaca

 la verdad es que no se por que me molesto en contestar, te llevo diciendo desde el primer post la metodologia a seguir y tu sigues empeñado en hacer saltarte las normas de redibujado de windows, creo que lo mejor que puedes hacer es aprender primero esto y luego ponte a hacer el reloj, ya veras como lo entiendes todo luego

shephiroth

 Tranquilos, que bajen loshumos, que esto es un foro para ayudarnos, no para saltar a atacarnos a la minima discordancia.

Zupervaca, me aventuro a pedirte perdon de parte de Buffon.....el estaba dando por sentado unas cosas, tu otras, y simplemente ninguno os entendisteis. No dejes que el tema vaya mas allá ^^

Buffon, creo q te falta un moco de autoanálisis......sabes q invalidate hace una llamada a onpaint, y buscas un metodo q haga lo mismo sin esa llamada???? Tal funcion no existe, y te explicaré pq.....es ilogico (por lo menos para mi) que en OnPaint() quieras actualizar datos. Esto esta fuera de la metodologia de OOP....la funcion OnPaint() se ha de encargar de pintar y solo de pintar.......si quieres hacer un reloj digital tienes q hacer el evento que cada minuto llame a CambiarHora()....en ella haces los cambios, y haces el Invalidate()

Espero que se me haya entendido  (nooo)

Un salundo a ambos  (ole)  (ole)  

Buffon

 Si yo te he entendido es más esa era la forma sencilla que tenía para hacerlo, y también entiendo que no sea la forma lógica de hacerlo, y mucho más que la llamada OnPaint esté realizada de tal forma que sea casi imposible modificar esa llamada, pero entended que también era casi imposible en windows modificar el vector de interrupciones, pero con esfuerzo y dedicación se puede conseguir eso mismo y programarte tus propias rutinas de interrupciones.

Llevo en esto de la programación bastante tiempo ya, y siempre me ha gustado saber el por qué de las cosas, como está algo implementado y como poderlo mejorar, o en todo caso modificar y si puede ser de la manera más sencilla.

Ahí está el motivo de mi duda ^^.

@zupervaca

Si te ha ofendido mi alusión, pues lo siento solemnemente, pero tio xDDD acabo de decir yo lo del timer y como si yo no lo supiera me lo sueltas en tu siguiente mensaje sin leer el mio anterior >_<

@sephirot

gracias por la gran ayuda que me has brindado ^^ seguiré en mi busqueda ;)


zupervaca

 pues bien tu analisis funcional de las cosas no creo que puedas mejorar lo que hay ya hecho desde el primer windows que se hizo, sin animo de ofender, en tu post anteior dices dos soluciones, el timer y otro hilo aparte del de la aplicacion, en mi post te digo que uses el timer, un hilo con un sleep puede ser la mayor chapuza que haya podido ver en programacion para crear un reloj, cualquier universitario (yo estuve trabajando con uno y yo no lo soy) te diria que los hilos son las formas faciles de hacer las cosas pero que solo se deben de usar en casos muy excepcionales, si hay eventos que hagan lo que quieres hacer o parte de ello tienes que utilizarlos, que es mas jaleo, pues hay que aguantarse, pero las cosas hay que hacerlas bien no en plan chapuza, si todos usaran hilos con sleep tendriamos los ordenadores sin recursos (muchos sabran lo que digo)

usa la metodologia que windows te da que es la correcta:

- evento timer
- modificas valores en el evento timer
- invalidas la zona donde se pinta el reloj desde el evento timer
- en el mensaje de pintar pintas que pa eso esta  :P

saludos

Citar@sephirot

gracias por la gran ayuda que me has brindado ^^ seguiré en mi busqueda
me encanta ver como otra persona dice lo mismo que yo decia desde el primer post y el dice lo correcto y yo no, esta claro que hay gente que no necesita mi ayuda o sencillamente no la quiere  :huh:  






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.