Beiträge von nuts
-
-
Würde eher sagen deine Uhr ist verschoben.

-
Wenn du willst, kannst du es ja machen (nimm als Beispiel die BASS.au3)
[/autoit]Sieht so aus als müsste doch etwas mehr gemacht werden, z.B. ein Parameter für die Errorfunktion der Bass.au3, da auch andere Bass UDF's darauf zugreifen (wozu die dll übergeben werden müsste) .
Ich schaus mir mal an, möchte aber niemand reinpfuschen. -
Kann es sein, dass in diesem Paket: http://www.autoitscript.com/forum/index.php?showtopic=83481
seit dem Update der Bass.au3 die anderen UDF's nichtmehr richtig funktionieren?
Arbeitet jemand mit der neusten Version der BASS UDF's?
Diese scheinen mir ziemlich fehlerhaft. z.B. BassEnc.au3 -> Zeile 108 WARNING: $bassenc_dll: possibly used before declaration.edit \ Noch was ist mir aufgefallen: zu den BassEnc.au3 Funktionen wir auch die _BASS_ErrorGetCode() aufgerufen.
Diese Funktion erfordert aber mit der neusten Bass.au3 keinen Parameter mehr.
Harmoniert noch nicht wirklich miteinander
-
Ohne die befürchtete Stringquälerei bin ich dabei.

-
Hm naja wir wollen jetzt den Wettbewerb nicht vorzeitig lösen, aber ist dabei nicht z.B. Schluss wenn ein e^ in der Formel vorkommt?
Oder wir beschränken uns auf die in Autoit definierten Rechenarten? -
Wow ich glaubs nicht - es funktioniert
Nicht nur die Umwandlung, sondern es wird tatsächlich ein EPG-Item erfolgreich erstellt
Tausend Dank, bastle schon 4 Tage an den paar Zeilen.
opaed: Die Verbindung per ObjGet geht nur zu "DVBViewerServer.DVBViewer"
Zu den untergordneten Methode lässt sich dann nur wie im meinem Skript eine Verbindung herstellen.
-
Hm meinste? Die Abfragen funktionieren ja alle.
Naja Versuch macht klug, melde mich wieder.
-
Kommt auf die Anwendung an. Vielleicht gibts ne bessere Möglichkeit als ein Klicker-Skript? Asnonsten gibt es noch die Mouse-Funktionen.
-
Dann wirds mit Controlclick schwierig.
-
Zitat
ConsoleWrite(Number($item.Duration) & " " & VarGetType(Number($item.Duration)) &@CRLF) = 18991230004500 Int64
edit \ vermutlich soll die Delphi Ausgabe von 18991230004500 das bedeuten: 0.004500 -> 45min im EPG (lt angezeigtem Sender EPG im Programm)
1891230 hat irgendwas mit dem Delphiurknall zu tun.
Die Objekte mit Daten zu füttern ist ein einziges Minenfeld.
Mir ist durchaus bewusst, das Hilfe bei unbekannte, nicht testbaren Objekten schwierig ist.
Solltet ihr Infos brauchen fragt einfach. -
Nicht schlecht.
Könnte je nach Anforderung den Nachteil haben, dass nachträgliche Eingaben die bisherige Eingabe nach rechts durchschieben. -
Hm? Der Forumbereich ist nur für Member.
Hab den Firefox nicht installiert, aber wie muss ich den Link anpassen das jeder drauf zugreifen kann? -
zu1.: Stimmt, wird geändert.
zu2. Die Funktion _Newitem() ist ja nur ein Beispiel. Die Funktion kann ja beliebig geändert/erweitert werden (_Serialisvalid oder sowas) -
Grundsätzlich ist diese Aufgabe interessant.
Ich verstehe nur nicht so ganz die Stringübergabe. Das artet in ganz wilde Regexp Konstruktionen für alle erdenklichen "Rechenarten" (sin, cos, e^, ln, Wurzel usw. wenn ich mir meinen Taschenrechner ansehe wird mir ganz schwindlig) aus.
Soweit meine Gedanken dazu.
-
Hab das jetzt mal mit 4 Controls und WM_Command umgesetzt.
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <Guilistview.au3>
#include <WindowsConstants.au3>#Region ### START Koda GUI section ### Form=
[/autoit] [autoit][/autoit] [autoit]
$Form1 = GUICreate("Form1", 633, 438, 192, 132)
$ListView1 = GUICtrlCreateListView("Input1|Input2|Input3|Input4", 16, 16, 601, 265)
Global $hLVHandle = GUICtrlGetHandle($ListView1)
_GUICtrlListView_SetColumn($hLVHandle, 0, "Input1", 130, 0)
_GUICtrlListView_SetColumn($hLVHandle, 1, "Input2", 130, 0)
_GUICtrlListView_SetColumn($hLVHandle, 2, "Input3", 130, 0)
_GUICtrlListView_SetColumn($hLVHandle, 3, "Input4", 130, 0)
$Input1 = GUICtrlCreateInput("", 16, 320, 129, 24)
GUICtrlSetLimit(-1, 4)
$Input2 = GUICtrlCreateInput("", 168, 320, 129, 24)
GUICtrlSetLimit(-1, 4)
$Input3 = GUICtrlCreateInput("", 328, 320, 137, 24)
GUICtrlSetLimit(-1, 4)
$Input4 = GUICtrlCreateInput("", 496, 320, 121, 24)
GUICtrlSetLimit(-1, 4)GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
[/autoit] [autoit][/autoit] [autoit]$button = GUICtrlCreateButton("ADD", 250, 350, 100, 50)
[/autoit] [autoit][/autoit] [autoit]Global $hCM = GUICtrlCreateContextMenu($ListView1) ; ein Kontextmenü für das Listview erstellen
[/autoit] [autoit][/autoit] [autoit]
Global $hCMDel = GUICtrlCreateMenuItem("Markierte Einträge löschen", $hCM) ; der 3. KontextmenüeintGUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]
#EndRegion ### END Koda GUI section ###While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $button
_NewItem()
Case $hCMDel
_GUICtrlListView_DeleteItemsSelected($hLVHandle)
EndSwitch
WEndFunc MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
$nNotifyCode = BitShift($wParam, 16)
If $nNotifyCode = $EN_UPDATE Then
Switch ControlGetFocus("Form1")
Case "Edit1"
If StringLen(GUICtrlRead($Input1)) = 4 Then GUICtrlSetState($Input2, $gui_focus)
Case "Edit2"
If StringLen(GUICtrlRead($Input2)) = 4 Then GUICtrlSetState($Input3, $gui_focus)
Case "Edit3"
If StringLen(GUICtrlRead($Input3)) = 4 Then GUICtrlSetState($Input4, $gui_focus)
Case "Edit4" ;Vorsicht es droht eine Endlosschleife
If StringLen(GUICtrlRead($Input4)) = 4 Then
ConsoleWrite("Achtung - Dieser Befehl muss gut durchdacht sein" & @CRLF & "Soll der Fokus wieder auf Input1 gesetzt werden müssen die Controls zuerst wieder zurückgesetzt werden, da das Skript sonst in einer Endlosschleife hängt")
_NewItem()
GUICtrlSetData($Input1, "")
GUICtrlSetData($Input2, "")
GUICtrlSetData($Input3, "")
GUICtrlSetData($Input4, "")
GUICtrlSetState($Input1, $gui_focus)
EndIfEndSwitch
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
EndIf
EndFunc ;==>MY_WM_COMMANDFunc _NewItem() ; Funktion zum auslesen der Eingabefelder (Neuer Eintrag bzw. Eintrag bearbeiten)
[/autoit]
GUICtrlCreateListViewItem(GUICtrlRead($Input1) & "|" & GUICtrlRead($Input2) & "|" & GUICtrlRead($Input3) & "|" & GUICtrlRead($Input4), $ListView1)
EndFunc ;==>_NewItemedit \ verbesserte Version
-
Hallo, danke für deine Antwort. Das mit dem Link stimmt
lässt sich aber nicht ändern.
Hier ein Auszug aus dem Gespräch:Spoiler anzeigen
ZitatAlles anzeigen
Du holst dir erst die EPG Collection:QUELLTEXT
$List = .EPGManager.Get(132,6 ,0,0)Danach das Item (alles pseudocode!):
QUELLTEXT
$Item = List.Item(0)Danach erzeugst Du Dir eine neues Item:
QUELLTEXT
$EPGAddBuffer = EPGManager.EPGAdd()
$NewItem = EPGAddBuffer.Newitem()Und dann:
QUELLTEXT
NewItem.description = Item.Description
NewItem.Title = Item.Title
NewItem.ChannelID = Neue channelID
NewItem.Genre = Item.Genre
[...]Wenn alles durch ist machst Du:
QUELLTEXT
EPGAddBuffer.additem(NewItem)Das ganze in einer schleife für alle Items in der Collection und zum schluss kommt ein
QUELLTEXT
EPGAddBuffer.commit()Ich frage mal ob man die Com-Doku hier anhängen kann.
Der Code im Startpost ist überarbeitet, da einige Eigenschaften "readonly" sind und daher gar nicht funktionieren können.

edit \ bezüglich Methoden / Events: Mal schaun ob die Doku angehängt werden darf.
Ist zielführender, da ich totaler Anfänger im objektorientierten Programmieren bin.edit2 \ Com-Doku angehängt
-
Hey,
sitze immernoch an einem Skript für den DVBViewer (TV-Software - in Delphi geschrieben).
Folgendes soll gemacht werden: EPG-Daten von einem Sender holen und die gleichen Daten wieder setzen, nur für einen anderen Sender (der keine eigenen EPG-Daten hat).
Soweit so gut - Hier mal der Link zum Gespräch mit dem Entwickler: http://www.dvbviewer.info/forum/index.php?showtopic=38502
Und das Skript:Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
$DVBViewer = ObjGet("", "DVBViewerServer.DVBViewer");Verbindung aufbauen -> klappt
If $DVBViewer = 0 Then; ohne Verbindung das Skript beenden
MsgBox(1, "", "Keine Verbindung zum DVBViewer möglich")
Exit
EndIf$epg = $DVBViewer.EPGManager
[/autoit] [autoit][/autoit] [autoit]
$get = $epg.Get(132,6 ,0,0)
$count = $get.Count()
$item = $get.Item(1)
$add = $epg.addEPG
$newitem = $add.newitemwith $item
[/autoit] [autoit][/autoit] [autoit]
$charset = .Charset;
$content = .Content;
$Description = .Description;
$duration = .Duration;
$endtime = .EndTime;
$EPGEventID = .EPGEventID;
$Event = .Event;
$EventID = .EventID;
$serviceID = .ServiceID;
$Time = .Time;
$Title = .Title;
$TransportID = .TransportID;
ConsoleWrite(VarGetType($duration) & @CRLF)
EndWithwith $newitem
[/autoit] [autoit][/autoit] [autoit]
.charset=$charset
.content = $content
.Description = $Description.Duration=$duration ; -> TDateTime (Delphi spezifisch?) entspricht einer Fliesskommazahl (double)
[/autoit] [autoit][/autoit] [autoit]
.time=$Time ; -> TDateTime entspricht einer Fliesskommazahl (double)
.event=$Event
.eventID=$EventID
.title=$Title
.EPGEventID=$EPGID ; EPGChannelID vom neuen Sender (hier eurosport)EndWith
[/autoit] [autoit][/autoit] [autoit]$add.add($newitem)
[/autoit]
$add.commit()
Leider interpretiert Autoit die geholten Daten "falsch" und bei der Übergabe kommt ein Error (Request to Objekt failed oder so ähnlich)Das wieder zurechtzubiegen funktioniert nur teilweise:
Spoiler anzeigen
[autoit]
[/autoit]
with $item
$duration = .Duration; -> $duration wird als String interpretiert
$endtime = .EndTime; -> string ..
$Time = .Time; -> string ..
EndWith
with $newitem
.Duration=_WinAPI_IntToFloat(Number($Duration)); -> Geht nach der Wandlung von String to Int to Float
.time=_WinAPI_IntToFloat(Number($time)); -> Error
EndWith
[autoit]
Sehr verwirrend
$Newitem.Duration = $Item.Duration; ohne Zwischenschritt klappts auch nicht
[/autoit]
Vielleicht fällt euch ja noch was ein?Gruß nuts
P.S. aus der COM-Doku:
-
Contra: Lange Variablen sind Gift für den Interpreter.
Der Nachteil am öffentlichen, eigenen Obfuscator ist außerdem, dass er möglicherweise mit in die Decompilierer eingebaut werden kann.
Ansonsten aber nicht schlecht gemacht
-
Hm verdammt
Gibts da kein workaround?Edit \ Gibts vielleicht eine .dll die man für den Aufruf verwenden könnte und das Ergebnis als Array liefert?
Brauche nur die Daten, die SpeicherReferenz zum zurückgeben brauch ich erstmal nicht, da es die Funktion AddArray gar nicht gibt.