Beiträge von funkey
-
-
Sorry, hab das mit dem Format missverstanden, so ist es sowieso viel einfacher.
Zitat von dodo-dkWie kann ich mich dankbar zeigen?
Wir helfen gerne. Ein danke genügt.
-
So kannst du auf das Format kommen:
Spoiler anzeigen
[autoit]Local $Zahl = InputBox("Zahl eingeben", "Bitte geben Sie eine reale Zahl ein")
[/autoit] [autoit][/autoit] [autoit]
$Zahl = StringReplace($Zahl, ",", ".")
If Not (StringIsFloat($Zahl) Or StringIsInt($Zahl)) Then
ConsoleWrite("Falsche Eingabe!" & @CRLF)
Exit
EndIfLocal $iNachkomma = StringInStr($Zahl, ".")
[/autoit] [autoit][/autoit] [autoit]
Local $iLen = StringLen($Zahl)
Local $iErgebnisIf $iNachkomma <> 0 Then
[/autoit] [autoit][/autoit] [autoit]
$iErgebnis = $Zahl * 10^($iLen - $iNachkomma)
Else
$iErgebnis = $Zahl
EndIfWhile StringLen($iErgebnis) < 6
[/autoit] [autoit][/autoit] [autoit]
$iErgebnis = "0" & $iErgebnis
WEndConsoleWrite($iErgebnis & @CRLF)
[/autoit] [autoit][/autoit] [autoit][/autoit] -
Ich bin jetzt eigentlich fast zufrieden mit der Anwendung, deswegen stelle ich den Thread auf gelöst.
Ich will eigentlich nur verhindern, das der Event eines Controls öfter als einmal ausgeführt wird, da ich damit Daten an die SPS schicke.
Wenn ich z.B. 614.28 zur SPS senden will, dann wurde vorher 6, 61, 614, 614.2 und zu guter letzt 614.28 gesendet. Und dass das nicht optimal ist, ist wohl jedem hier klar.
Aber nun funktioniert eh alles bis auf, dass der Wert wenn er geändert wurde beim Focus-Verlust auch gesendet werden soll. Aber das schaffe ich auch noch.Trotzdem danke Bugfix.
-
Danke UEZ, auf diese Möglichkeit bin ich auch gekommen, auch wenn sie mir nicht so recht gefällt. Aber es wird schon gehen (müssen).
Spoiler anzeigen
[autoit]Opt("GuiOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]GUICreate("Test Bug", 200, 200)
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent(-3, "_Exit")
GUIRegisterMsg(0x0111, "_WM_COMMAND")Global $ActiveControl = 0
[/autoit] [autoit][/autoit] [autoit]Global $nInput1 = GUICtrlCreateInput("0.00", 10, 10, 80, 20, 0x800)
[/autoit] [autoit][/autoit] [autoit]
Global $nInput2 = GUICtrlCreateInput("0.00", 10, 30, 80, 20, 0x1000)
Global $nInput3 = GUICtrlCreateInput("0.00", 10, 50, 80, 20)AdlibRegister("_UpdateInput1", 1000)
[/autoit] [autoit][/autoit] [autoit]GUISetState()
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(20000)
WEndFunc _Exit()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFuncFunc _UpdateInput1()
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetData($nInput1, StringFormat("%3.2f", Random()))
EndFuncFunc _WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
[/autoit]
Local $nNotifyCode = BitShift($wParam, 16)
Local $nID = BitAND($wParam, 0x0000FFFF)
If $nNotifyCode = 256 Then ; Got Focus
$ActiveControl = $nID
EndIf
If $nID = 1 And $nNotifyCode = 0 Then
ConsoleWrite("ID" & $ActiveControl & " - " & GUICtrlRead($ActiveControl) & " - Enter pressed" & @cr)
EndIf
EndFunc -
Nein, der Focus bleibt erhalten.
-
Danke. Ich möchte aber Adlibregister eigentlich nicht deaktivieren. Die Daten kommen von einer SPS, und je nach Parameter können auch diese Eingabefelder editiert werden, deswegen kann ich auch kein Label nehmen, bei dem dieser Fehler nicht auftritt.
Ich werde mal versuchen mit WM_COMMAND was zu basteln. -
Ich habe einige Inputfelder, die automatisch aktualisiert werden und andere bei denen ich was eingeben kann. Nur da wird der Event schon vor dem Drücken der Enter-Taste ausgelöst, und zwar immer wenn ein anderes Inputfeld automatisch beschrieben wird. Gibt es dafür eine Lösung?
Danke.Spoiler anzeigen
[autoit]Opt("GuiOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]GUICreate("Test Bug", 200, 200)
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent(-3, "_Exit")Global $nInput1 = GUICtrlCreateInput("0.00", 10, 10, 80, 20, 0x800)
[/autoit] [autoit][/autoit] [autoit]
Global $nInput2 = GUICtrlCreateInput("0.00", 10, 30, 80, 20)
GUICtrlSetOnEvent($nInput2, "_Input2")AdlibRegister("_UpdateInput1", 1000)
[/autoit] [autoit][/autoit] [autoit]GUISetState()
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(20000)
WEndFunc _Exit()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFuncFunc _Input2()
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite(GUICtrlRead(@GUI_CtrlId) & " - Enter pressed?" & @CRLF)
EndFuncFunc _UpdateInput1()
[/autoit]
GUICtrlSetData($nInput1, StringFormat("%3.2f", Random()))
EndFunc -
Ist zwar schon gelöst, aber ich wollte nur zeigen, dass man Adlibregister sehr wohl auch dafür nutzen kann.
Spoiler anzeigen
[autoit]If $CmdLine[0] = "" Then
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
AdlibRegister("_Console", 1000)
AdlibRegister("_MsgBox", 10000)
Else
_Blobb()
EndIfWhile 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(200000)
WEndFunc _Console()
[/autoit] [autoit][/autoit] [autoit]
If @Compiled Then
MsgBox(262144, "Kurzer Aufruf", @SEC, 1)
Else
ConsoleWrite(@SEC & @CR)
EndIf
EndFunc ;==>_ConsoleFunc _MsgBox()
[/autoit] [autoit][/autoit] [autoit]
If @Compiled Then
Run(@ScriptFullPath & " zweite")
Else
ConsoleWrite("BlaBla" & @CR)
EndIf
EndFunc ;==>_MsgBoxFunc _Blobb()
[/autoit]
MsgBox(4096 + 32, "Langer Aufruf", "Hallo, diese Funktion dauert ganz lange!!",
Exit
EndFunc ;==>_Blobb
Am besten kompiliert testen. -
Vielen Dank, damit kann ich was anfangen!
-
-
Hallo.
Gibt es irgendeinen einfachen Weg, um in C/C++ aus einem ClassnameNN eines Buttons eines Fensters das Handle des Controls zu bestimmen?
Ich stelle mir da eine Funktion vor, die ähnlich wie FindWindowEx arbeitet, hab aber noch nicht das richtige gefunden.Danke für jede hilfreiche Antwort.
-
-
Das war eines meiner ersten

Skript zum Einordnen von MP3's -
-
Ich könnte mir vorstellen, dass man die 120% irgendwo auslesen kann und dann die Schriftarten im eigenen Programm dementsprechend kleiner zeichnet. Die Frage ist nur, wo liest man diese Einstellung aus?
-
Die Größe beträgt bei mir mit Code:Blocks und MinGw 6,50 KB. Ich aber deutlich langsamer als Basic und nach dem Weglassen von pow() ungefähr gleich schnell wie Pascal. Wenn ich allerdings "Pi/180" als Konstante verwende, dann wird es wieder langsamer. Vielleicht solltest du den richtigen Algo nun auch noch in C kompilieren, damit nicht die besseren Optimierungen in den Kompilern über die bessere Sprache siegen.

-
-
Dann halt noch ein vereinfachtes Hilfe-Beispiel:
Spoiler anzeigen
[autoit]#include <GuiComboBoxEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiImageList.au3>
#include <GuiConstantsEx.au3>Local $hGUI, $hImage, $hCombo
[/autoit] [autoit][/autoit] [autoit]$hGUI = GUICreate("ComboBoxEx Create Solid BitMap", 400, 300)
[/autoit] [autoit][/autoit] [autoit]
$hCombo = _GUICtrlComboBoxEx_Create($hGUI, "", 2, 2, 394, 100)
GUISetState()$hImage = _GUIImageList_Create(16, 16, 5, 3)
[/autoit] [autoit][/autoit] [autoit]
_GUIImageList_Add($hImage, _GUICtrlComboBoxEx_CreateSolidBitMap ($hCombo, 0xFF0000, 16, 16))
_GUIImageList_Add($hImage, _GUICtrlComboBoxEx_CreateSolidBitMap ($hCombo, 0x00FF00, 16, 16))
_GUIImageList_Add($hImage, _GUICtrlComboBoxEx_CreateSolidBitMap ($hCombo, 0x0000FF, 16, 16))
_GUICtrlComboBoxEx_SetImageList($hCombo, $hImage)_GUICtrlComboBoxEx_AddString($hCombo, "Rot", 0, 0)
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlComboBoxEx_AddString($hCombo, "Grün", 1, 1)
_GUICtrlComboBoxEx_AddString($hCombo, "Blau", 2, 2)Do
[/autoit]
Until GUIGetMsg() = $GUI_EVENT_CLOSE -
Ein Beispiel aus der Hilfe:
[autoit]#include <GuiComboBoxEx.au3>
[/autoit][autoit][/autoit][autoit]
#include <GuiImageList.au3>
#include <GuiConstantsEx.au3>Opt('MustDeclareVars', 1)
[/autoit][autoit][/autoit][autoit]$Debug_CB = False ; Check ClassName being passed to ComboBox/ComboBoxEx functions, set to True and use a handle to another control to see it work
[/autoit][autoit][/autoit][autoit]_Main()
[/autoit][autoit][/autoit][autoit]Func _Main()
[/autoit][autoit][/autoit][autoit]
Local $hGUI, $hImage, $hCombo
; Create GUI
$hGUI = GUICreate("ComboBoxEx Create Solid BitMap", 400, 300)
$hCombo = _GUICtrlComboBoxEx_Create ($hGUI, "", 2, 2, 394, 100)
GUISetState()$hImage = _GUIImageList_Create (16, 16, 5, 3)
[/autoit][autoit][/autoit][autoit]
_GUIImageList_Add ($hImage, _GUICtrlComboBoxEx_CreateSolidBitMap ($hCombo, 0xFF0000, 16, 16))
_GUIImageList_Add ($hImage, _GUICtrlComboBoxEx_CreateSolidBitMap ($hCombo, 0x00FF00, 16, 16))
_GUIImageList_Add ($hImage, _GUICtrlComboBoxEx_CreateSolidBitMap ($hCombo, 0x0000FF, 16, 16))
_GUICtrlComboBoxEx_SetImageList ($hCombo, $hImage)For $x = 0 To 2
[/autoit][autoit][/autoit][autoit]
_GUICtrlComboBoxEx_AddString ($hCombo, StringFormat("%03d : Random string", Random(1, 200, 1)), $x, $x)
NextDo
[/autoit]
Until GUIGetMsg() = $GUI_EVENT_CLOSE
EndFunc ;==>_Main -
Schau dir mal das Hilfe-Beispiel zu GUICtrlCreateContextMenu an.

-
Gefällt mir sehr gut, bis auf das Neuzeichnen, wenn man das Fenster über den Desktoprand hinausschiebt, oder ein anderes Fenster darüberzieht.
Aber auf alle Fälle schön!!Hast du das schon gesehen, das ist mein neuer Favorit: http://www.autoitscript.com/forum/topic/12…box-tipped-udf/
-
Hätte da noch einen Versuch für einen Workaround
[autoit]
[/autoit][autoit][/autoit][autoit]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>Opt('GUIOnEventMode', 1)
[/autoit][autoit][/autoit][autoit]Global $hGui = GUICreate("Quasi-Transparentes Input-Control", 300, 300)
[/autoit][autoit][/autoit][autoit]
GUISetOnEvent(-3, '_Ende')
GUIRegisterMsg($WM_COMMAND, 'MY_WM_NOTIFY')GUICtrlCreatePic(@DocumentsCommonDir&'\Eigene Bilder\Beispielbilder\Sonnenuntergang.jpg', 0, 0, 300, 300, 0)
[/autoit][autoit][/autoit][autoit]GUICtrlCreateLabel("Transparentes Input-Control", 20, 20, 260, 20, 0x201)
[/autoit][autoit][/autoit][autoit]
GUICtrlSetBkColor(-1, -2)Global $nInput = GUICtrlCreateInput('', 23, 50, 257, 1, 0x200)
[/autoit][autoit][/autoit][autoit]
Global $hInput = GUICtrlGetHandle(-1)Global $nLabel = GUICtrlCreateLabel("", 20, 50, 260, 16, 0x1000)
[/autoit][autoit][/autoit][autoit]
GUICtrlSetBkColor(-1, -2)
GUICtrlSetOnEvent(-1, "_EditActivate")GUICtrlCreateLabel("Normales Input-Control", 20, 90, 260, 20, 0x201)
[/autoit][autoit][/autoit][autoit]
GUICtrlSetBkColor(-1, -2)GUICtrlCreateInput('', 25, 120, 255, 20, 0x200)
[/autoit][autoit][/autoit][autoit]GUISetState()
[/autoit][autoit][/autoit][autoit]While 1
[/autoit][autoit][/autoit][autoit]
Sleep(10000)
WEndFunc _Ende()
[/autoit][autoit][/autoit][autoit]
Exit
EndFuncFunc _EditActivate()
[/autoit][autoit][/autoit][autoit]
ControlFocus($hGui, "", $hInput)
EndFuncFunc MY_WM_NOTIFY($hWnd, $msg, $wParam, $lParam)
[/autoit][autoit][/autoit][autoit][/autoit]
Local $nID = BitAND($wParam, 0x0000FFFF)
If $nID = $nInput Then GUICtrlSetData($nLabel, ' ' & GUICtrlRead($nInput))
EndFunc