|
7371
|
Programación / .NET (C#, VB.NET, ASP) / Re: Windows Form transparente
|
en: 31 Marzo 2014, 09:19 am
|
1. ¿Que tipo de proyecto es?.
Un control debe añadirse a un container que pueda albergar controles, por ende no se puede hacer sin una "ventana", Control.ControlCollection Class, al menos, hasta donde yo se. Puedes heredar la Class ToolStripControlHost, para mostrar un popup con un control, pero es limitada y tiene sus inconvenientes, no te servirá de mucho. O puedes heredar un Form, añadirle los controles y hacer el form "transparente".
Te he escrito un ejemplo completo, para un proyecto de tipo WindowsForms, pero no te acostumbres. PD: Lo escribí en VB.NET, te servirá para orientarte y puedes traducir el código usando cualquier conversor online: http://converter.telerik.com/Por un lado, la Class que hereda un System.Windows.Form, la cual se puede mejorar, pero es solo un ejemplo (nótese el color Fuchsia, quizas quieras cambiarlo): EDITO: Funcionalidad extendida para mover los controles al mantener el botón del ratón. ' *********************************************************************** ' Author : Elektro ' Modified : 03-31-2014 ' *********************************************************************** ' <copyright file="ControlsForm.vb" company="Elektro Studios"> ' Copyright (c) Elektro Studios. All rights reserved. ' </copyright> ' ************************************************************************* ''' <summary> ''' Class ControlsForm. ''' Invisible Form designed to host Controls. ''' </summary> Public Class ControlsForm : Inherits Form #Region " Variables & Properties " ''' <summary> ''' Indicates whether the Form and it's controls are moveable. ''' </summary> Private _Moveable As Boolean = False ''' <summary> ''' Indicates whether the moveable events are handled ''' </summary> Private MoveableIsHandled As Boolean = False ''' <summary> ''' Boolean Flag that indicates whether the Form should be moved. ''' </summary> Private MoveFormFlag As Boolean = False ''' <summary> ''' Indicates the position where to move the form. ''' </summary> Private MoveFormPosition As Point = Nothing ''' <summary> ''' Gets or sets a value indicating whether this <see cref="ControlsForm"/> and it's controls are movable. ''' </summary> ''' <value><c>true</c> if controls are movable; otherwise, <c>false</c>.</value> Public Property Moveable As Boolean Get Return Me._Moveable End Get Set(ByVal value As Boolean) Me._Moveable = value Dim Pan As Panel = (From p As Panel In MyBase.Controls.OfType(Of Panel)() Where p.Tag = Me.Handle).First Select Case value Case True ' Add Moveable Events to EventHandler. If Not Me.MoveableIsHandled Then ' If not Moveable handlers are already handled then... For Each c As Control In Pan.Controls AddHandler c.MouseDown, AddressOf MouseDown AddHandler c.MouseUp, AddressOf MouseUp AddHandler c.MouseMove, AddressOf MouseMove Next c Me.MoveableIsHandled = True End If Case False ' Remove Moveable Events from EventHandler. If Me.MoveableIsHandled Then ' If Moveable handlers are already handled then... For Each c As Control In Pan.Controls RemoveHandler c.MouseDown, AddressOf MouseDown RemoveHandler c.MouseUp, AddressOf MouseUp RemoveHandler c.MouseMove, AddressOf MouseMove Next c Me.MoveableIsHandled = False End If End Select End Set End Property #End Region #Region " Constructors " ''' <summary> ''' Prevents a default instance of the <see cref="ControlsForm"/> class from being created. ''' </summary> Private Sub New() End Sub ''' <summary> ''' Initializes a new instance of the <see cref="ControlsForm" /> class. ''' Constructor Overload to display a collection of controls. ''' </summary> ''' <param name="Controls">The control array to display in the Formulary.</param> ''' <param name="FormLocation">The default Formulary location.</param> Public Sub New(ByVal [Controls] As Control(), Optional ByVal FormLocation As Point = Nothing) ' InitializeComponent call. MyBase.SuspendLayout() MyBase.Name = "ControlsForm" ' Adjust Form size. MyBase.ClientSize = New Size(0, 0) MyBase.AutoSize = True MyBase.AutoSizeMode = AutoSizeMode.GrowAndShrink ' Set the Transparency properties. MyBase.AllowTransparency = True MyBase.BackColor = Color.Fuchsia MyBase.TransparencyKey = Color.Fuchsia MyBase.DoubleBuffered = False ' Is not necessary to display borders, icon, and taskbar, hide them. MyBase.FormBorderStyle = BorderStyle.None MyBase.ShowIcon = False MyBase.ShowInTaskbar = False ' Instance a Panel to add our controls. Dim Pan As New Panel With Pan ' Suspend the Panel layout. Pan.SuspendLayout() ' Set the Panel properties. .Name = "ControlsForm Panel" .Tag = Me.Handle .AutoSize = True .AutoSizeMode = AutoSizeMode.GrowAndShrink .BorderStyle = BorderStyle.None .Dock = DockStyle.Fill End With ' Add our controls inside the Panel. Pan.Controls.AddRange(Controls) ' Add the Panel inside the Form. MyBase.Controls.Add(Pan) ' If custom Form location is set then... If Not FormLocation.Equals(Nothing) Then ' Set the StartPosition to manual relocation. MyBase.StartPosition = FormStartPosition.Manual ' Relocate the form. MyBase.Location = FormLocation End If ' Resume layouts. Pan.ResumeLayout(False) MyBase.ResumeLayout(False) End Sub ''' <summary> ''' Initializes a new instance of the <see cref="ControlsForm" /> class. ''' Constructor Overload to display a single control. ''' </summary> ''' <param name="Control">The control to display in the Formulary.</param> ''' <param name="FormLocation">The default Formulary location.</param> Public Sub New(ByVal [Control] As Control, Optional ByVal FormLocation As Point = Nothing) Me.New({[Control]}, FormLocation) End Sub #End Region #Region " Event Handlers " ''' <summary> ''' Handles the MouseDown event of the Form and it's controls. ''' </summary> ''' <param name="sender">The source of the event.</param> ''' <param name="e">The <see cref="MouseEventArgs"/> instance containing the event data.</param> Private Shadows Sub MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) _ Handles MyBase.MouseDown If e.Button = MouseButtons.Left Then Me.MoveFormFlag = True Me.Cursor = Cursors.NoMove2D Me.MoveFormPosition = e.Location End If End Sub ''' <summary> ''' Handles the MouseMove event of the Form and it's controls. ''' </summary> ''' <param name="sender">The source of the event.</param> ''' <param name="e">The <see cref="MouseEventArgs"/> instance containing the event data.</param> Private Shadows Sub MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) _ Handles MyBase.MouseMove If Me.MoveFormFlag Then Me.Location += (e.Location - Me.MoveFormPosition) End If End Sub ''' <summary> ''' Handles the MouseUp event of the Form and it's controls. ''' </summary> ''' <param name="sender">The source of the event.</param> ''' <param name="e">The <see cref="MouseEventArgs"/> instance containing the event data.</param> Private Shadows Sub MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) _ Handles MyBase.MouseUp If e.Button = MouseButtons.Left Then Me.MoveFormFlag = False Me.Cursor = Cursors.Default End If End Sub #End Region End Class
Por otro lado, la Class de ejemplo de uso: EDITO: Class actualizada. Public Class Form1 #Region " Objects " ' Our inherited Form. Protected WithEvents frm As ControlsForm = Nothing ' Our controls. Friend WithEvents tb1 As New TextBox With {.Text = "Elektro-Test 1"} Friend WithEvents tb2 As New TextBox With {.Text = "Elektro-Test 2"} Friend WithEvents cb1 As New CheckBox With {.Text = "Elektro-Test 3", .FlatStyle = FlatStyle.Flat} #End Region #Region " Constructor " ''' <summary> ''' Initializes a new instance of the <see cref="Form1"/> class. ''' </summary> Public Sub New() ' This call is required by the designer. InitializeComponent() ' Center this form into the screen. Me.StartPosition = FormStartPosition.CenterScreen End Sub #End Region #Region " Main Button Event Handlers " ''' <summary> ''' Handles the Click event of the ButtonMain control. ''' </summary> Private Sub ButtonMain_Click(ByVal sender As Object, ByVal e As EventArgs) _ Handles ButtonMain.Click ' Set the Control locations. tb1.Location = New Point(5, 5) tb2.Location = New Point(tb1.Location.X, tb1.Location.Y + CInt(tb1.Height * 1.5R)) cb1.Location = New Point(tb2.Location.X, tb2.Location.Y + CInt(tb2.Height * 1.5R)) ' Instance the Form that will store our controls. If frm Is Nothing Then frm = New ControlsForm({tb1, tb2, cb1}, New Point(Me.Bounds.Right, Me.Bounds.Top)) End If With frm .Moveable = True ' Set the Controls moveable. .Show() ' Display the invisible Form. End With End Sub #End Region #Region " Textbox's Event Handlers " ''' <summary> ''' Handles the TextChanged event of the TextBox controls. ''' </summary> ''' <param name="sender">The source of the event.</param> ''' <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param> Friend Sub tb_textchanged(ByVal sender As Object, ByVal e As KeyPressEventArgs) _ Handles tb1.KeyPress, tb2.KeyPress, cb1.KeyPress ' Just a crazy message-box to interacts with the raised event. MessageBox.Show("No me da la gana que cambies el texto de mis preciosos controles, asi que voy a hacerlos desaparecer!", "Elektro Is Angry '¬¬", MessageBoxButtons.OK, MessageBoxIcon.Stop) e.Handled = True ' Searchs the ControlsForm Dim f As Form = sender.FindForm ' ...And close it f.Hide() ' f.Close() ' f.Dispose() End Sub #End Region End Class
...Que produce este resultado, donde lo de la derecha son 3 textboxes en el interior del Form "transparente":  Saludos
|
|
|
7372
|
Informática / Software / Re: Firefox se me queda paralizado, y no un paralizado "común"
|
en: 31 Marzo 2014, 07:48 am
|
que complementos tienes ? Que es lo ultimo que has instalado / modificado ? ... Lo último que he instalado es, pues nada. Te contradices bastante: No me gustaría desintalarlo por que ahí tengo miiiiiles de cosas muuuy importantes, ya que cuando lo desintalo y lo instalo se borraría todo, y entonces sería bajón que buscara las miles de cosas para ponerlas de nuevo. En fin, sin conocer esas miles de cosas entre las que imagino habrá Addons/plugins de terceros... 1. Prueba a desactivar la aceleración de hardware GPU en las opciones de Firefox. 2. asegurate de tener actualizada la versión de Firefox: http://www.mozilla.org/es-ES/firefox/new/3. haz una limpieza con CCleaner para borrar archivos temporales de Firefox que puedan estar en conflico. Saludos
|
|
|
7374
|
Sistemas Operativos / Windows / ¿Cual es la clave de registro donde están listados los dispositivos ATA?
|
en: 30 Marzo 2014, 14:28 pm
|
En un Home PC los dispositivos Serial ATA están listados en la siguiente clave: HKLM\SYSTEM\CurrentControlSet\Enum\SCSI\(MANUFACTURER ID) Pero he podido comprobar que en los portatiles que tienen discos duros ATA estos no están en dicha clave. Mediante un Script identifico la ID del producto del disco duro principal (Ej: DISK&VEN_WDC_WD10&PROD_02FAEX-00Z3A0), y necesito modificar un valor que está dentro de la clave que indiqué arriba (Ej: HKLM\SYSTEM\CurrentControlSet\Enum\SCSI\DISK&VEN_WDC_WD10&PROD_02FAEX-00Z3A0), pero para los discos duros ATA parece que la ruta de la clave es distinta... y no la encuentro, como tampcoo encuentro información al respecto. ¿Alguien sabe cual es la clave de registro equivalente donde Windows lista los dispositivos ATA? Saludos EDITO:Ya lo descubrí: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\IDE
|
|
|
7376
|
Programación / Scripting / Re: LUA SCRIPT - BOTONES CON DOBLE FUNCIÓN
|
en: 29 Marzo 2014, 15:42 pm
|
@CADIAR, eliminé tu mensaje original por error, te envié un MP con el post, si lo vuelves a postear elimino mi post para no crear confusiones.
Porfavor, lee las normas: 1. Los códigos tienen que ir con su etiqueta Geshi, usa el botón para insertar código.
( El autor del siguiente mensaje es @CADIAR, no yo. ) Actualizando... Conseguí un script que debería hacer lo que quiero, darle dos funciones a los botones según el tiempo que se mantengan presionados, pero me de el siguiente error cuando lo ejecuto: E:\Logitech Scripts\llProject\llProject.lua:24: chunk has too many syntax levels este es el script en cuestión: -- llProject End --> ll=ll or {}; ll.SETUP = { Folder = [[E:\Logitech Scripts\llProject\]] } dofile(ll.SETUP.Folder .. [[llProject.lua]]) -- llProject End --> -- ll.devMode = dm_TEST function _onActivation() -- -- ADD ANY START UP ROUTINES HERE -- ll.mouse.map[0] = { } ll.lhc.map[1] = { G1 = { fn_ClickHold, "a", 30, "b", 1000 }, G2 = { fn_ClickHold, { "lctrl", "c" }, 30, { "lshift", "d"}, 1000 }, } end ClickHoldInfo = {} function fn_ClickHold( ClickTableOrKey, ClickDelay, HoldTableOrKey, HoldDelay ) local key = ll.Event.Mode .. "|" .. ll.Event.Key .. "|" .. ll.Event.Family if ll.Event.Pressed then ClickHoldInfo[key] = { timestamp = GetRunningTime(), held = false } elseif ll.Event.Down then if not ClickHoldInfo[key].held and GetRunningTime() - ClickHoldInfo[key].timestamp >= HoldDelay then Press( HoldTableOrKey, ClickDelay ) ClickHoldInfo[key].held = true end elseif ll.Event.Released then if GetRunningTime() - ClickHoldInfo[key].timestamp < HoldDelay then PressAndRelease( ClickTableOrKey, ClickDelay ) else Release( HoldTableOrKey, ClickDelay ) end ClickHoldInfo[key] = nil end end function Press( TableOrKey ) local key, table if type(TableOrKey) == "table" then table = TableOrKey elseif type(TableOrKey) == "string" then key = TableOrKey else return end if key then ll.Press(key) else for i, v in ipairs(table) do ll.Press(v) end end end function Release( TableOrKey ) local key, table if type(TableOrKey) == "table" then table = TableOrKey elseif type(TableOrKey) == "string" then key = TableOrKey else return end if key then ll.Press(key) else for i, v in ipairs(table) do ll.Release(v) end end end function PressAndRelease( TableOrKey, delay ) local key, table local delay = delay or 0 if type(TableOrKey) == "table" then table = TableOrKey elseif type(TableOrKey) == "string" then key = TableOrKey else return end if key then ll.Press(key) Sleep(delay) ll.Release(key) else for i, v in ipairs(table) do ll.Press(v) end Sleep(delay) for i, v in ipairs(table) do ll.Release(v) end end end
|
|
|
7377
|
Sistemas Operativos / Windows / Re: Problema con los permisos de escritura en HDD en Windows 8.1
|
en: 29 Marzo 2014, 12:11 pm
|
Hola Está claro que si el problema te sucede solo en ciertos programas, como el navegador y el JD, entonces no es un problema del dispositivo (y más cuando te ha pasado en dos discos nuevecitos) como tampoco parece ser un problema específico del JD, pero de todas formas quizás en las versiones nuevas de JD hayan echo mejoras en ese aspecto, eso me lleva a la siguiente pregunta... 1. ¿Que versión de JD estás usando?, por versión me refiero a JDownloader o JDownloader 2, no a la build en concreto. ¿Te has actualizado al JDownloader 2 Beta? A mi en alguna ocasión también me ha pasado el mismo problema que comentas con los enlaces del JD, el mismo error, siempre he pensado que debe ser algún bug porque simplemente con reiniciar los enlaces todo vuelve a funcionar... 2. ¿Has intentado reiniciar los enlaces fallidos?. 3. ¿Sabes si tienes algún programa de terceros que mantenga en uso el directorio en donde descargas archivos?, eso podría imposibilitar la escritura de archivos en el interior, dando así errores semejantes. 4. ¿Has probado a ver si te sucede lo mismo con otro navegador como Firefox o Chrome? 5. ¿Tu conexión de red se mantiene online durante todo el tiempo que dura la descarga ...hasta que falla, o es una conexión inestable que se reinicia? 6. ¿Has probado a activar la cuenta oculta de Administrador en el sistema, y realizar las operaciones de descarga desde allí?. Ya se que eres 'administrador', pero no es lo mismo, dicha cuenta no tiene ninguna restricción, a diferencia de las restricciones que por defecto windows impone a un usuario con privilegios de 'administrador'. En consola: net.exe User Administrador /Active:Yes
Reinicias sesión, y verás una nueva cuenta llamada Administrador.
Como puedo mirar el "Sistema de archivos"? No creo que ninguna marca vaya a vender portatiles con un disco duro formateado en FAT, pero bueno, puedes comprobarlo de forma sencilla usando WMIC desde la consola con el siguiente comando: WMIC.exe Volume Where 'DriveLetter="C:"' Get Capion,FileSystem /Format:LIST
Saludos
|
|
|
7378
|
Sistemas Operativos / Windows / Re: ¿Y si no quiero dejar Windows XP?
|
en: 29 Marzo 2014, 10:30 am
|
el 8 no lo recomiendo, es un vista más... lo he usado, pero después de unos 3 meses empieza a dar problemas con drivers, apagado, etc... Esa es solo una mala experiencia que has tenido, y la respeto, pero como toda mala experiencia ...siempre hay una causa desencadenante, no es culpa de Windows, no debes generalizar, Windows 8/8.1 es mejor que sus antecesoes ...en todos los aspectos importantes, que guste o incomode el entorno o que un PC sufra un fallo y culpemos a Windows es algo muy distinto, por ejemplo a mi me incomodaba hasta que encontré la solución para darle un aspecto 'a lo windows 7', en todos los demás aspectos de este SO no puedo tener ni una sola queja, aunque se que hay más gente con malas experiencias... esto es como todo. Al final supongo que me tocará tragar con el 7, ¿pero qué pasa si no accedo y me quedo con el XP, sitiado y en minoría como la irreductible aldea gala? ¿Esto es una duda o...?, de verdad jeje no se que tipo de opinión o respuesta esperas encontrar. A dia de hoy estás usando una versión en desventaja de Windows, sin contar que quizás haya sido y seguirá siendo el Windows más vulnerable que existe, tiene muchas menos características integradas que sus predecesores, y tampoco es compatible con aplicaciones de última generación (Me refiero a las Metro Apps, aunque esto a mi personálmente me la suda, pero es un punto más en contra)... ...¿Que que que pasará si no aceptas el cambio?, pues que seguirás usando el mismo SO inestable, vulnerable y falto de características, y deberás atenerte a las (posibles futuras) consecuencias que pueda accarearte, si eres un usuario informático con cabeza y nunca te ha pasado nada grave con XP pues no creo que tengas nada de lo que preocuparte ...quédate con el SO que más te guste y ya está, sin más vueltas. Pero, si sirve de algo mi opininión (he tenido como SO principal todos los Windows desde el 98, menos los Servers) deberías actualizarte a Windows 7, a pesar de que considero (y es un echo) que Windows 8/8.1 es bastante mejor (y por esa única razón lo tengo instalado), pero para mi el SO con el que mejor me he llevado y el cual considero el más óptimo sistema operativo estándar para cualquier PC siempre ha sido el Seven, no tienes nada que perder, y mucho que ganar. Saludos
|
|
|
7380
|
Sistemas Operativos / Windows / Re: Windows 7 lite
|
en: 28 Marzo 2014, 17:28 pm
|
...¿Que esperabas?. En este foro no se da soporte a Windows modificados, precisamente porque les eliminan varias características que en algunos casos (como el tuyo) imposibilitan la instalación o el buen uso del SO en general. ¿Soluciones?: 1. Descarga e instala la ISO de Windows original (sin modificar). 2. Haz tu propio Windows reducido (no es muy complicado). 3. Sigue probando a descargarte otros Windows modificados hasta que tengas suerte y uno te funcione... PD: Ediciones oficiales de Windows 7 con SP1 integradoSaludos
|
|
|
|
|
|
|