Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Meta en 4 Mayo 2018, 00:17 am



Título: Controlando estados de los mensajes
Publicado por: Meta en 4 Mayo 2018, 00:17 am
Hola:

Por fin a base de código y comiando desde C#, he logrado hacer que muestre en modo visual el F#, normalmente es en consola, pero bueno.

(https://www.subeimagenes.com/img/captura-1870225.PNG)

Quiero lograr de alguna vez por todas, que al pulsar el botón abrir, en el momento que lo pulses, dice el mensaje "Abriendo...".

Cuando la bandeja del lector se abrió del todo, dice, "Abierto.".

Logro que abra y cierre la bandeja pero no que muestre los mensajes.

¿Alguna idea?

Sigo dándole caña, me cansé.

Código Visual F#:
Código:
// En Opciones de Lector_Form_fs en el Explorador de soluciones.
// Con el segundo botón del ratón, en Tipo de salida: Aplicación Windwos.

open System
open System.Text
open System.Windows.Forms // Añadir refrencias.
open System.Drawing // Añadir referencias.
open System.Runtime.InteropServices

// Importar librería o dll externo.
[<DllImport("winmm.dll")>]
extern int mciSendString(string lpstrCommand, StringBuilder lpstrReturnString,
        int uReturnLength, IntPtr hwndCallback)

let rt = StringBuilder(127)

// Método necesario para admitir el Diseñador. No se puede modificar
// el contenido de este método con el editor de código.
let form = new Form()
let label_Mensaje = new Label()
let groupBox_Bandeja = new GroupBox()
let button_Abrir = new Button();
let button_Cerrar = new Button();
groupBox_Bandeja.SuspendLayout()
form.SuspendLayout()

// groupBox_Bandeja
groupBox_Bandeja.Controls.Add(button_Abrir) // Añadir botones en el
groupBox_Bandeja.Controls.Add(button_Cerrar) // groupBox_Bandeja.
groupBox_Bandeja.Location <- Point(22, 118)
groupBox_Bandeja.Name <- "groupBox_Bandeja"
groupBox_Bandeja.Size <- Size(227, 90)
groupBox_Bandeja.TabIndex <- 0
groupBox_Bandeja.TabStop <- false
groupBox_Bandeja.Text <- "Bandeja:"

// button_Abrir
button_Abrir.Location <- Point(26, 39)
button_Abrir.Name <- "button_Abrir"
button_Abrir.Size <- Size(75, 23)
button_Abrir.TabIndex <- 0
button_Abrir.Text <- "&Abrir"
button_Abrir.UseVisualStyleBackColor <- true

// button_Cerrar
button_Cerrar.Location <- Point(129, 39)
button_Cerrar.Name <- "button_Cerrar"
button_Cerrar.Size <- Size(75, 23)
button_Cerrar.TabIndex <- 1
button_Cerrar.Text <- "&Cerrar"
button_Cerrar.UseVisualStyleBackColor <- true

// label_Mensaje
label_Mensaje.AutoSize <- true
//label_Mensaje.Font <- Font("Microsoft Sans Serif", 36, FontStyle.Bold, GraphicsUnit.Point, ((byte)(0)))
label_Mensaje.Location <- Point(12, 9)
label_Mensaje.Name <- "label_Mensaje"
label_Mensaje.Size <- Size(52, 55)
label_Mensaje.TabIndex <- 1
label_Mensaje.Text <- "?"
form.Controls.Add(label_Mensaje) // Añadir en el formulario.

// Crear formulario.
let AutoScaleDimensions = new Size(6, 13)
form.AutoScaleMode <- AutoScaleMode.Font
form.BackColor <- Color.FromArgb(((int)(((byte)(114)))), ((int)(((byte)(54)))), ((int)(((byte)(161))))) // Color violeta.
let ClientSize = new Size(284, 261)
form.Controls.Add(groupBox_Bandeja) // Añadir en el formulario.
form.Name <- "Form1"
form.StartPosition <- FormStartPosition.CenterScreen
form.Text <- "Visual F# 2017"
groupBox_Bandeja.ResumeLayout(false)
form.ResumeLayout(false)
form.PerformLayout()
//----------------------------------------------------------------------------------

// Abrir la bandeja.
let mensajeA abr = label_Mensaje.Text <- "Abriendo..."
let abr = label_Mensaje.Click.Add(mensajeA)
Application.DoEvents()
let button_Abrir_Click abrir = mciSendString("set CDAudio door open", rt, 127, IntPtr.Zero) |> ignore
let abrir = button_Abrir.Click.Add(button_Abrir_Click)
let mensajeAbierto2 ao = label_Mensaje.Text <- "Abierto."
let ao = label_Mensaje.Click.Add(mensajeAbierto2)

// Cerrar la bandeja.
let button_Cerrar_Click cerrar = mciSendString("set CDAudio door closed", rt, 127, IntPtr.Zero) |> ignore
let cerrar = button_Cerrar.Click.Add(button_Cerrar_Click)

[<STAThread>]
Application.Run(form)

Saludos.

PD: ¿Por qué Microsoft no hizo o hace una buena plantilla para crear formularios Windwos o WPF como se hace con C# y VB .net? Está dedicado a modo consola, pero en Visual, hay que programar todo.


Título: Re: Controlando estados de los mensajes
Publicado por: Eleкtro en 4 Mayo 2018, 08:32 am
PD: ¿Por qué Microsoft no hizo o hace una buena plantilla para crear formularios Windwos o WPF como se hace con C# y VB .net? Está dedicado a modo consola, pero en Visual, hay que programar todo.

El hecho de que Visual Studio no provea un diseñador gráfico o visual designer para F# es algo que deja ver entre lineas que dicho lenguaje no ha sido creado con la intención de ser aplicado de esa forma, dicho de otro modo: no le estás dando el uso apropiado que se le debería dar a F#. Por lo general F# se suele utilizar en forma de scripts para la elaboración de algoritmos aritméticos complejos que acabarcan aplicaciones de ámbito científico o financiero, más que otra cosa.

Simplemente, te estás complicando la vida de forma totálmente innecesaria escribiendo decenas de lineas de código (que se irán multiplicando por cientos) para construir los elementos de la interfaz de usuario con F#, cuando lo más sensato sería crear la interfaz de usuario con C# bajo tu tecnología favorita (Windows Forms o WPF) y simplemente añadir una referencia a una librería desarrollada en F#, o añadir un script en F# a tu proyecto de C# para ejecutarlo con F# Interactive (fsi.exe), como prefieras.

Quiero lograr de alguna vez por todas, que al pulsar el botón abrir, en el momento que lo pulses, dice el mensaje "Abriendo...".

Cuando la bandeja del lector se abrió del todo, dice, "Abierto.".

Logro que abra y cierre la bandeja pero no que muestre los mensajes.

¿Alguna idea?

Volvemos a lo mismo... lee:

  • https://foro.elhacker.net/net/hacer_funcionar_el_lector_de_bandeja_de_discos_con_este_lenguaje_net-t477001.0.html;msg2146231#msg2146231

Saludos.


Título: Re: Controlando estados de los mensajes
Publicado por: Meta en 4 Mayo 2018, 13:21 pm
Buenos días buen hombre:

Lo he logrado. Lo dejo aquí por si alguien le pica la curiosidad algún lector o lectora.
Código
  1. open System
  2. open System.Text
  3. open System.Windows.Forms // A&#241;adir refrencias.
  4. open System.Drawing // A&#241;adir referencias.
  5. open System.Runtime.InteropServices
  6.  
  7. // Importar librer&#237;a o dll externo.
  8. [<DllImport("winmm.dll")>]
  9. extern int mciSendString(string lpstrCommand, StringBuilder lpstrReturnString,
  10.        int uReturnLength, IntPtr hwndCallback)
  11.  
  12. let rt = StringBuilder(127)
  13.  
  14. // M&#233;todo necesario para admitir el Dise&#241;ador. No se puede modificar
  15. // el contenido de este m&#233;todo con el editor de c&#243;digo.
  16. let form = new Form()
  17. let label_Mensaje = new Label()
  18. let groupBox_Bandeja = new GroupBox()
  19. let button_Abrir = new Button();
  20. let button_Cerrar = new Button();
  21. groupBox_Bandeja.SuspendLayout()
  22. form.SuspendLayout()
  23.  
  24. // groupBox_Bandeja
  25. groupBox_Bandeja.Controls.Add(button_Abrir) // A&#241;adir botones en el
  26. groupBox_Bandeja.Controls.Add(button_Cerrar) // groupBox_Bandeja.
  27. groupBox_Bandeja.Location <- Point(22, 118)
  28. groupBox_Bandeja.Name <- "groupBox_Bandeja"
  29. groupBox_Bandeja.Size <- Size(227, 90)
  30. groupBox_Bandeja.TabIndex <- 0
  31. groupBox_Bandeja.TabStop <- false
  32. groupBox_Bandeja.Text <- "Bandeja:"
  33.  
  34. // button_Abrir
  35. button_Abrir.Location <- Point(26, 39)
  36. button_Abrir.Name <- "button_Abrir"
  37. button_Abrir.Size <- Size(75, 23)
  38. button_Abrir.TabIndex <- 0
  39. button_Abrir.Text <- "&Abrir"
  40. button_Abrir.UseVisualStyleBackColor <- true
  41. // this.button_Abrir.Click += new System.EventHandler(this.button_Abrir_Click);
  42.  
  43. // button_Cerrar
  44. button_Cerrar.Location <- Point(129, 39)
  45. button_Cerrar.Name <- "button_Cerrar"
  46. button_Cerrar.Size <- Size(75, 23)
  47. button_Cerrar.TabIndex <- 1
  48. button_Cerrar.Text <- "&Cerrar"
  49. button_Cerrar.UseVisualStyleBackColor <- true
  50.  
  51. // label_Mensaje
  52. label_Mensaje.AutoSize <- true
  53. //label_Mensaje.Font <- Font("Microsoft Sans Serif", 36, FontStyle.Bold, GraphicsUnit.Point, ((byte)(0)))
  54. label_Mensaje.Location <- Point(12, 9)
  55. label_Mensaje.Name <- "label_Mensaje"
  56. label_Mensaje.Size <- Size(52, 55)
  57. label_Mensaje.TabIndex <- 1
  58. label_Mensaje.Text <- "?"
  59. form.Controls.Add(label_Mensaje) // A&#241;adir en el formulario.
  60.  
  61. // Crear formulario.
  62. let AutoScaleDimensions = new Size(6, 13)
  63. form.AutoScaleMode <- AutoScaleMode.Font
  64. form.BackColor <- Color.FromArgb(((int)(((byte)(114)))), ((int)(((byte)(54)))), ((int)(((byte)(161))))) // Color violeta.
  65. let ClientSize = new Size(284, 261)
  66. form.Controls.Add(groupBox_Bandeja) // A&#241;adir en el formulario.
  67. form.Name <- "Form1"
  68. form.StartPosition <- FormStartPosition.CenterScreen
  69. form.Text <- "Visual F# 2017"
  70. groupBox_Bandeja.ResumeLayout(false)
  71. form.ResumeLayout(false)
  72. form.PerformLayout()
  73. //----------------------------------------------------------------------------------
  74.  
  75. // Abrir la bandeja.
  76. button_Abrir.Click.Add(fun _a ->
  77. label_Mensaje.Text <- "Abriendo..."
  78. Application.DoEvents()
  79. mciSendString("set CDAudio door open", rt, 127, IntPtr.Zero) |> ignore
  80. label_Mensaje.Text <- "Abierto."
  81. )
  82.  
  83.  
  84. // Cerrar la bandeja.
  85. button_Cerrar.Click.Add(fun _c ->
  86. label_Mensaje.Text <- "Cerrando..."
  87. Application.DoEvents()
  88. mciSendString("set CDAudio door closed", rt, 127, IntPtr.Zero) |> ignore
  89. label_Mensaje.Text <- "Cerrado."
  90. )
  91.  
  92. [<STAThread>]
  93. Application.Run(form)

Lo que no logro es la línea que lo dejé en C#  no se como adaptarlo en F#, cambiar el tamaño de la fuente de un label.

Gracias por las respuestas.

PD: Todo lo de F# que has contado lo he leído, a pesar de ello, muchos por Internet hacen tonterías estas y soy de ellos.

PD2: Probaré el leguaje R (https://docs.microsoft.com/es-es/visualstudio/rtvs/getting-started-with-r). Haber si logro hacer lo mismo. Son solo tonterías que hago. Pero antes, seguiré con F#, esta vez con WPF para variar.


Título: Re: Controlando estados de los mensajes
Publicado por: Serapis en 4 Mayo 2018, 20:42 pm
Opino como Elektro.

...pero también opino que cada uno es libre de perder el tiempo como quiera, y si eso es lo que te gusta, allá tú...

Ser capaz de abrir la bandeja de la unidad óptica en 25 lenguajes de programación, es una manera estúpida (pero genuina) de perder el tiempo, porque al final todas ellas, acabarán llamando a la misma función del driver que controla la unidad...



Título: Re: Controlando estados de los mensajes
Publicado por: Meta en 5 Mayo 2018, 00:58 am
Perder el tiempo, como me dijo una amiga psicoterapeuta, simplemente es experiencia.
En mi caso probando de todo un poco. ;)