Wie kann ich ein Eingabefeld NACHTRÄGLICH als Password- oder Readonly deklarieren?
Inputfeld als password
-
oliver -
26. August 2006 um 16:46 -
Geschlossen -
Erledigt
-
-
- Offizieller Beitrag
GUICTRLSetStyle...
Syntax und Beispiel siehe Hilfe.peethebee
-
Moin,
Falls verstanden, sorry!
Mfg
Analyzer
-
- Offizieller Beitrag
@Analyzer:
ZitatNACHTRÄGLICH
peethebee
-
Hab's so probiert:
$kennwort = guictrlcreateinput("", 460, 20, 100)
guictrlsetstyle($kennwort, 32)geht aber nicht!!!!
-
- Offizieller Beitrag
-
- Offizieller Beitrag
Versuchs damit:
oder
Edit: Pee mal wieder schneller
Edit #2:
Tatsächlich - es geht nicht. Habs mal bei anderen Elementen (Liste) probiert. Auch dort ist SetStyle wirkungslos.Einzige, wenn auch etwas umständliche Alternative:
CodeGUICtrlDelete($kennwort) $kennwort = GUICtrlCreateInput("", 460, 20, 100, 20, $ES_PASSWORD) ; zurück auf DefaultStyle: GUICtrlDelete($kennwort) $kennwort = GUICtrlCreateInput("", 460, 20, 100, 20)
Das funktioniert dann wenigstens. -
tja, readonly geht bei mir auch - aber das mit dem password klappt einfach nicht
-
Moin Oliver,
kannst du mir / uns denn mal erklären warum man eine Inputzeile in einem GUI NACHTRÄGLICH als $ES_PASSWORD deklarieren sollte? Möchte es gerne einfach verstehen
Oder verstehe ich das NACHTRÄGLICH einfach falsch?
Mfg
Analyzer
-
- Offizieller Beitrag
Die Frage von Analyzer ist natürlich berechtigt.
Grundsätzlich ist es möglich (und manchmal auch sinnvoll) den Style eines Controls dynamisch zu ändern.
Ich hab mal das englische Forum durchforstet. Die haben ebenfalls bemerkt, dass GUICtrlSetStyle() nur auf einige Contrlos angewendet werden kann.
Leider habe ich noch keine Auflistung der möglichen Controls gefunden. -
Ist eigentlich ganz einfach:
Habe eine Maske zum Erfassen (wenn Daten nicht vorhanden) oder Bearbeiten (wenn Daten bereits vorhanden. Das Ganze ist am Anfang des Programmes definiert. Mann gibt eine Benutzer-ID ein, es wird in einer Datei danach gesucht und bei Gefunden kann man's bearbeiten, ansonsten neuen Benutzer erfassen. Beim Bearbeiten soll natürlich der Benutzername und noch ein paar Felder nicht geändert werden können und das Kennwort soll nicht angezeigt werden.
-
- Offizieller Beitrag
-
das ist dann aber die hammer lösung....warum geht es mit dem password-wert nicht?
-
Moin,
ich hab hier mal eine Möglichkeit erstellt, vielleicht kannst du es ja für dich verwenden!
Spoiler anzeigen
Code
Alles anzeigen#include <GUIConstants.au3> GUICreate("Normal Input oder Password Input", 350, 215) $normal = GUICtrlCreateInput("",130,90,100,20) $passw = GUICtrlCreateInput("",130,90,100,20, $ES_PASSWORD) GUICtrlSetState(-1, $GUI_HIDE) $normalbutton = GUICtrlCreateButton("Normal", 35, 185, 70, 20) $passwbutton = GUICtrlCreateButton("Password", 105, 185, 70, 20) $cancelbutton = GUICtrlCreateButton("Cancel", 245, 185, 70, 20) GUISetState () While 1 $msg = GUIGetMsg() Select Case $msg = $cancelbutton Or $msg = $GUI_EVENT_CLOSE ExitLoop Case $msg = $normalbutton GUIChangeItems($normal, $passw, $normal, $normal) Case $msg = $passwbutton GUICtrlSetState ($passw, $GUI_HIDE) GUIChangeItems($normal, $passw, $passw, $passw) EndSelect WEnd GUIDelete() Exit Func GUIChangeItems($hidestart, $hideend, $showstart, $showend) Local $idx For $idx = $hidestart To $hideend GUICtrlSetState ($idx, $GUI_HIDE) Next For $idx = $showstart To $showend GUICtrlSetState ($idx, $GUI_SHOW) Next EndFunc
Mfg
Analyzer
-
- Offizieller Beitrag
Eine Möglichkeit ist wahrscheinlich noch:
ZitatGUICtrlSendMsg ( controlID, msg , wParam, lParam )
Gibt den Wert zurück, der von der SendMessage Windows API zurückgegeben wurde (siehe Microsoft-Dokumentation).
In der MS-Doku habe ich dazu folgendes gefunden:
ZitatlResult = SendMessage
( // returns LRESULT in lResult
(HWND) // handle to destination
hWndControl, control
(UINT)
EM_SETPASSWORDCHAR, // message ID
(WPARAM) wParam, // = (WPARAM) () wParam;
(LPARAM) lParam // = 0; not used, must be zero
);
Wie das auf die Funktion anzuwenden ist, ist mir (noch) nicht klar. Habe GUICtrlSendMsg noch nie genutzt. Die Hilfe ist dabei auch nicht sehr nützlich.Aber vielleicht hat ja jemand damit schon experimentiert.
Edit:
Hab jetzt mal ein paar Beispiele ausprobiert. Man benötigt in jedem Fall den Hex-wert der Message. Aber nirgendwo schreibt jemand, wie man die findet
-
sieht nicht schlecht aus, da sollte sich was machen lassen.....
-
WinAPI
a = sendmessage(b, c, d, e)
a
32 bit integer, ergebnis
b
16 bit integer, fensterhandle
c
16 bit integer, message
d
16 bit integer, zusätzliche message
e
32 bit integer, zusätzliche message -
- Offizieller Beitrag
Hallo!
Wenn man die Message EM_SETPASSWORDCHAR sendet geht es. Das Style $ES_PASSWORD macht auch nichts anderes. Nur muss man nach dem Ändern 1 mal den Focus auf das Control setzen damit die Änderung auch angewendet wird!
Code
Alles anzeigen#include <GuiConstants.au3> Global Const $EM_GETPASSWORDCHAR = 0xD2 Global Const $EM_SETPASSWORDCHAR = 0xCC Const $PasswordChar = Asc("*") $bPasswordOn = False $Gui = GUICreate("Double Click Demo", 417, 356, 192, 125) $inputBox = GUICtrlCreateInput("Test",10, 10,300,20) $TogglePW = GUICtrlCreateButton("ändern",10,250) GUISetState(@SW_SHOW) While 1 $msg = GUIGetMsg() Select Case $msg = $GUI_EVENT_CLOSE ExitLoop Case $msg = $TogglePW $Focus = ControlGetFocus($Gui) If $bPasswordOn Then GUICtrlSendMsg($inputBox, $EM_SETPASSWORDCHAR, 0, -1) $bPasswordOn = False Else GUICtrlSendMsg($inputBox, $EM_SETPASSWORDCHAR, $PasswordChar, -1) $bPasswordOn = True EndIf ControlFocus($Gui,"",$inputBox) ControlFocus($Gui,"",$Focus) Case Else ;;;;;;; EndSelect WEnd
-
- Offizieller Beitrag
-
- Offizieller Beitrag
Habs grad mal getestet, wenn du Passwordstyle so setzt (oder von Anfang an definierst mit Style $ES_PASSWORD):
CodeConst $EM_SETPASSWORDCHAR = 0xCC Const $PasswordChar = Asc("*") GUICtrlSendMsg($Input_1, $EM_SETPASSWORDCHAR, $PasswordChar, -1)
dann kannst du den Inhalt des Inputfeldes auch nicht rauskopieren ( STRG+C und ClipGet() ). Da erhältst du nur Müll.