Nun, bei uns funktioniert es. Somit ist ein Fehler im Code ausgeschlossen. Das Problem liegt also auf andere Weise bei dir.
Beiträge von BugFix
-
-
Und um es noch kürzer zu machen, befüllt man die Struktur in einem Aufruf.
[autoit]
HotKeySet('#!e', '_exit')
[/autoit][autoit][/autoit][autoit]While 1
[/autoit][autoit][/autoit][autoit]
ConsoleWrite( _MouseOverRECT(10, 10, 200, 200) & @CRLF)
Sleep(100)
WEndFunc _exit()
[/autoit][autoit][/autoit][autoit]
Exit
EndFuncFunc _MouseOverRECT($iLeft, $iTop, $iRight, $iBottom)
[/autoit]
Local $tRECT = DllStructCreate('int Left;int Top;int Right;int Bottom')
Local $old = Opt("MouseCoordMode", 1), $aMousePos = MouseGetPos()
Opt("MouseCoordMode", $old)
DllCall("user32", 'long', 'SetRect', 'ptr', DllStructGetPtr($tRECT), 'long', $iLeft, 'long', $iTop, 'long', $iRight, 'long', $iBottom)
Local $ret = DllCall("user32", 'long', 'PtInRect', 'ptr', DllStructGetPtr($tRECT), 'long', $aMousePos[0], 'long', $aMousePos[1])
If $ret[0] > 0 Then Return True
Return False
EndFuncVerwendung von Opt("MouseCoordMode", 1) ist richtig und wichtig. Aber auch bitte den vorherigen Wert speichern und anschließend zurücksetzen. Es kann ja sein, dass im Programm momentan ein anderer Modus genutzt wird.
-
Ich weiß nicht, ob sich dafür jemand findet.
Solch eine Software ist recht komplex. Das braucht schon einige hundert Mannstunden um das im vollen Funktionsumfang zu erstellen. Selbst wenn du da einen 1-EUR Jober findest zum Programm schreiben, ist das noch immer 'ne Stange Geld. -
SciTE bietet noch ein paar mehr HotKeys als jene, die über "Menü-Bearbeiten" angezeigt werden.
Ich hab mal hier eine Auflistung gemacht. Einige kannte ich auch noch nicht (z.B. rechteckigen Bereich auswählen od. Zeile tauschen).
Bisher hab ich um eine Zeile zu löschen diese markiert und dann gelöscht. Aber das Markieren kann man sich sparen, einfach Cursor in die Zeile, Strg+Shift+L
HotKeys in SciTE
Code
Alles anzeigenSchriftgröße - vergrößern Ctrl+Keypad+ Schriftgröße - verkleinern Ctrl+Keypad- Schriftgröße - zurück auf normal Ctrl+Keypad/ Tab aktivieren links vom aktuellen Tab Ctrl+Tab Tab aktivieren rechts vom aktuellen Tab Ctrl+Shift+Tab Einrücken Tab Einrücken rückgängig Shift+Tab Löschen bis Wortanfang Ctrl+BackSpace Löschen bis Wortende Ctrl+Delete Löschen bis Zeilenanfang Ctrl+Shift+BackSpace Löschen bis Zeilenende Ctrl+Shift+Delete Gehe zum Dokumentanfang Ctrl+Home Auswahl bis Dokumentanfang Ctrl+Shift+Home Gehe zum Zeilenanfang Home Gehe zum Anfang der gezeigten Zeile Alt+Home (wenn Zeilenumbruch aktiv, Pos. nach dem Umbruch) Gehe zum Dokumentende Ctrl+End Auswahl bis Dokumentende Ctrl+Shift+End Gehe zum Ende der gezeigten Zeile Alt+End (wenn Zeilenumbruch aktiv, Pos. vor dem Umbruch) Lesezeichen Erstellen/Löschen Ctrl+F2 Gehe zum nächsten Lesezeichen F2 Auswahl bis zum nächsten Lesezeichen Alt+F2 Suche Auswahl Ctrl+F3 Suche Auswahl rückwärts Ctrl+Shift+F3 Scrollen aufwärts Ctrl+Up Scrollen abwärts Ctrl+Down Zeile ausschneiden Ctrl+L Zeile kopieren Ctrl+Shift+T Zeile löschen Ctrl+Shift+L Zeile tauschen mit voriger Ctrl+T Auswahl duplizieren Ctrl+D Rechteckigen Block auswählen Alt+Shift+Movement Rechteckige Blockauswahl erweitern bis Zeilenanfang Alt+Shift+Home Rechteckige Blockauswahl erweitern bis Zeilenende Alt+Shift+End -
Doch beim Text des Labels muss ich auch einzelne Wörter Fett markieren können.
Alternativ kannst du doch den Text in mehrere Label stückeln, dann ist auch die Formatierung kein Problem. Denn du benötigst doch kein Eingabefeld, sondern fertiger Text wird ausgegeben. Um da auch dynamischen Text anzeigen (und formatieren) zu können, kannst du zur Laufzeit die Abmessungen ermitteln und die Labels antsprechend anpassen (suche mal nach 'Textmeter'). -
Ich werd nicht ganz schlau, was du möchtest.
- In den Exceldateien steht (vermutlich) ein Begriff (wo steht der), den du suchen willst.Dann ist es doch viel einfacher, die Excelsuche zu nutzen. Kannst du auch über AutoIt anschieben und auswerten.
Bsp.:
[autoit]; Eintrag suchen
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
Local $sFilePath = 'C:\test\si.xls'
Local $sSuchbegriff = '15.02.2009'Local $oExcel = ObjCreate("Excel.Application")
[/autoit][autoit][/autoit][autoit]
$oExcel.Visible = 0
Local $oBook = $oExcel.Workbooks.Open($sFilePath)
Local $oSheet = $oBook.Sheets(1)Local $Zelle, $Address = 0
[/autoit]
$Zelle = $oSheet.UsedRange.Find($sSuchbegriff)
If $Zelle <> '' Then $Address = $Zelle.Address ; Suchbegriff gefunden in Zelle.Adresse -
Erstellen lassen sich mit AutoIt keine Dll. Aber du kannst jede beliebige Dll verwenden und mit eigenem Inhalt füllen. Dazu kannst du den Resourcehacker oder den XN Resource Editor verwenden.
-
Das sollte so gehen:
[autoit]
(In deinem Fall natürlich eine bestehende Datei öffnen.)Local $oExcel = ObjCreate("Excel.Application")
[/autoit][autoit][/autoit][autoit]
$oExcel.Visible = 1
$oExcel.SheetsInNewWorkbook = 1 ; Anzahl der gewünschten Sheets beim Erstellen festlegen
Local $oBook = $oExcel.Workbooks.Add ; im Excel-Objekt ein Workbook-Objekt erstellen
Local $oSheet = $oBook.Sheets(1)
Local $i = 9 ; <== Startzeile$Zeilenanzahl = $oExcel.Worksheets(1).UsedRange.Rows.Count
[/autoit]
While $i <= $Zeilenanzahl
$oSheet.Rows($i).Interior.ColorIndex = 34
$i += 2
WEnd -
Ahh, jetzt verstehe ich.
Aber das kann schon rein logisch nicht klappen. Du gibst die Funktion an, die das Makro ausführen würde. Dazu wird intern VBA aufgerufen. Dieser Schritt fehlt, wenn du es per AutoIt machst.
Also du willst folgendes:
- Eingabe: Startzeile
- Ermitteln: letzte belegte Zeile
- in diesem Bereich jede zweite Zeile mit gewählter Hintergrundfarbe ausfüllenDas meinte ich übrigens mit Pseudocode
- nicht das Kommentieren des Codes.
Wenn du das so möchtest, werde ich mal eine AutoItvariante dazu erstellen. -
Schreib mal bitte in Pseudocode, was genau getan werden soll. Aus dem Makro werde ich nicht schlau.
Also in der Form:
- Tabelle öffnen
- von Zeile X bis zur letzten belegten Zeile markieren
etc. aber jedes Detail. -
Du willst also in einer Exceltabelle dieses Makro ausführen aber in Form eines AutoIt-Skripts?
-
Nimm besser ein Listview, da geht es (ListView - SubItem einzeln färben/formatieren, Finale Version!).
-
Es gibt (fast) nichts, was nicht schon gemacht wurde.

Guckst du: Eigene Console -
Billig heißt, mit möglichst wenig Aufwand einen Effekt erreichen.
Arbeitsspeicher aufpeppen (bis 4GB geht bei dem Board) und andere CPU (Athlon™ 64 X2 Dual Core verkraftet das Board). Das ist die preiswerteste Variante um aus der Kiste mehr rauszuholen. -
Gib dem Input den Style: ES_NUMBER.

-
Hast sogar Recht.
Naja, blindes Huhn findt auch mal 'n Korn.

-
-
lässt sich die absolute Position des Tabitems doch berechnen und z.B. in ein Array ablegen?
Könnte man machen, ist aber nicht flexibel. Wenn der User z.B. die Möglichkeit hat die Registertitel zu ändern, ändern sich auch die Positionen aller Item.Ich habe deshalb jetzt eine Funktion erstellt, die die Koordianten relativ zum Fenster ermittelt und bei der Gelegenheit habe ich aus den beiden Funktionen eine gemacht. Ist doch blödsinnig, nur wegen eines anderen Returntypes eine neue Funktion zu verwenden.
So klappt es jetzt:
Spoiler anzeigen
[autoit]#include <GuiConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiTab.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <StructureConstants.au3>$Form1 = GUICreate("Test", 297, 341, 210, 144)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$TabID = GUICtrlCreateTab(18, 18, 280, 240)
GUICtrlSetResizing(-1, $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
$tab1 = GUICtrlCreateTabItem("Tab 0")
$tab2 = GUICtrlCreateTabItem("Tab 1")
$tab3 = GUICtrlCreateTabItem("Tab 2")
$tab4 = GUICtrlCreateTabItem("Tab 3")
GUICtrlCreateTabItem("")
$labelRect = GUICtrlCreateLabel('', 8, 270, 280, 17)
$labelMouse = GUICtrlCreateLabel('', 8, 305, 280, 17)
GUISetState(@SW_SHOW)While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $GUI_EVENT_SECONDARYUP
For $i = 0 To 3
$old = Opt('MouseCoordMode', 2)
$mouse = MouseGetPos()
Opt('MouseCoordMode', $old)
GUICtrlSetData($labelMouse, 'MousePos: ' & $mouse[0] & ', ' & $mouse[1])
If _MouseOverTabItem($Form1, $TabID, $i) Then
WinSetTitle($Form1, '', 'Right clicked Index: ' & $i)
$rect = _GUICtrlTab_GetItemRectRelativ($Form1, $TabID, $i)
GUICtrlSetData($labelRect, 'ItemRECT: ' & $rect[0] & ', ' & $rect[1] & ', ' & $rect[2] & ', ' & $rect[3])
ExitLoop
EndIf
Next
EndSwitch
WEndFunc _MouseOverTabItem($GUI, $TabID, $iTabItem)
[/autoit] [autoit][/autoit] [autoit]
If Not BitAND(WinGetState($GUI),
Then Return False
Local $old = Opt('MouseCoordMode', 2)
Local $posM = MouseGetPos(), $tMouse = DllStructCreate($tagPOINT)
DllStructSetData($tMouse, 1, $posM[0])
DllStructSetData($tMouse, 2, $posM[1])
Opt('MouseCoordMode', $old)
Local $tTabItem = _GUICtrlTab_GetItemRectRelativ($GUI, $TabID, $iTabItem, 1)
If _WinAPI_PtInRect($tTabItem, $tMouse) Then
Return True
Else
Return False
EndIf
EndFunc ;==>_MouseOverTabItem;===============================================================================
[/autoit]
; Function Name: _GUICtrlTab_GetItemRectRelativ($GUI, $TabID, $iTabItem, $iReturnType=0)
; Description: Gibt die Koordinaten eines TabItem relativ zu den GUI-Koordinaten zurück
; Parameter(s): $GUI - Fensterhandle
; $TabID - ID des Tab (nicht Handle!)
; $iTabItem - Tabitem Index
; $iReturnType - Rückgabetyp Array=0 (Standard), RECT-Struktur=1
; Return Value(s): Array oder Struktur mit den TabItem Koordinaten (left, top, right, bottom)
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _GUICtrlTab_GetItemRectRelativ($GUI, $TabID, $iTabItem, $iReturnType=0)
Local $hWnd = GUICtrlGetHandle($TabID)
Local $TabPos = ControlGetPos($GUI, '', $TabID)
Local $tRECT = _GUICtrlTab_GetItemRectEx($hWnd, $iTabItem)
Local $posLeft = $TabPos[0]+2, $posTop = $TabPos[1]+2
Local $width = (DllStructGetData($tRECT,3) - DllStructGetData($tRECT,1))
Local $height = DllStructGetData($tRECT,4) - DllStructGetData($tRECT,2)
If $iTabItem > 0 Then
For $i = 0 To $iTabItem -1
$tRECT = _GUICtrlTab_GetItemRectEx($hWnd, $i)
$posLeft += (DllStructGetData($tRECT,3) - DllStructGetData($tRECT,1))
Next
EndIf
If $iReturnType Then
DllCall("user32", 'long', 'SetRect', 'ptr', DllStructGetPtr($tRECT), _
'long', $posLeft, 'long', $posTop, 'long', $posLeft+$width, 'long', $posTop +$height)
Return $tRECT
Else
Local $aOut[4] = [$posLeft, $posTop, $posLeft +$width, $posTop +$height]
Return $aOut
EndIf
EndFunc ;==>_GUICtrlTab_GetItemRectRelativ -
IRC ist ein dezentrales, verteiltes Protokoll. Beim HTTP Protokoll hast du eine abgeschlossene Ende-zu-Ende Verbindung zwischen Webbrowser und Webserver, das ist beim IRC nicht der Fall. Ein IRC-Client kann sich zwar verschlüsselt zum IRC-Server verbinden, aber der ist selbst mit einer Vielzahl anderer User und Server verbunden und übernimmt die Funktion eines Proxy. Du hast keine Gewähr, dass der Server diese Verbindungen auch verschlüsselt. Es kommt also für den 'geneigten Lauscher' nur darauf an, sich an der richtigen Stelle einzuklinken um unverschlüsselt mitlesen zu können.

-