Könntest du mir bitte helfen?
Habe zur Zeit viel zu tun, evtl, später.
Ist es möglich die GUI im Fenster anzudocken?
Ja, einfach die Koordinaten mit den Fensterkoordinaten abgleichen.
Könntest du mir bitte helfen?
Habe zur Zeit viel zu tun, evtl, später.
Ist es möglich die GUI im Fenster anzudocken?
Ja, einfach die Koordinaten mit den Fensterkoordinaten abgleichen.
Edit:
Für ein einzelnes Control habe ich keine Lösung parat, da die einzig mir bekannte Funktion (GetTextFace) seltsamerweise immer 'SYSTEM' zurückgibt.
(k.A. wo der Fehler liegt.
Vielleicht hilft dir das als Ansatz:
#Include <WinAPI.au3>
[/autoit][autoit][/autoit][autoit]; === Test-GUI
$gui = GUICreate('test')
$label = GUICtrlCreateLabel('test', 10, 10, 60, 17)
$hWnd = GUICtrlGetHandle($label)
GUICtrlSetFont(-1, Default, Default, Default, 'Courier New')
; === Device Context erstellen
Local $hDC = _WinAPI_GetDC($hWnd)
; === Font auslesen
MsgBox(0, 'Font Name', GetTextFace($hDC) )
; === Ressourcen löschen
_WinAPI_ReleaseDC($hWnd, $hDC)
GUIDelete($gui)
Func GetTextFace($hdc)
Local $tFaceName = DllStructCreate('char[128]')
DllCall('gdi32.dll', 'int', 'GetTextFace', 'int', $hdc, 'int', 128, 'ptr', DllStructGetPtr($tFaceName))
Return DllStructGetData($tFaceName, 1)
EndFunc
Die Funktionen der Listview-UDF verlangen das Handle des Listview (welches von _GUICtrlListView_Create zurückgegeben wird). GUICtrlCreateListView gibt dir die Control-ID zurück.
Erstelle also dein Listview mit GUICtrlCreateListView und lass dir dann das Handle zum Ctrl für die Nutzung der UDF ausgeben:
$ID_Listview = GUICtrlCreateListView(..)
$hWnd_Listview = GUICtrlGetHandle( $ID_Listview )
Verwende ein 2D-Array. So kannst du Dateipfad und die Größe zusammengehörig speichern und nach der Größe sortieren.
Edit:
Habs mal schnell gebastelt:
[autoit]#include <array.au3>
#include <file.au3>
Local $sPath = @ScriptDir & '\'
[/autoit][autoit][/autoit][autoit]Local $aFiles = _FileListToArray($sPath, '*', 1) ; nur Dateien
;~ _ArrayDisplay($aFiles)
Local $aFileInfo[$aFiles[0]][2]
For $i = 1 To UBound($aFiles) -1
$aFileInfo[$i-1][0] = $aFiles[$i]
$aFileInfo[$i-1][1] = FileGetSize($sPath & $aFiles[$i])
Next
;~ _ArrayDisplay($aFileInfo)
_ArraySort($aFileInfo, 0, 0, 0, 1)
_ArrayDisplay($aFileInfo)
Kann ich nur bestätigen, habe O&O Defrag seit Jahren auf meinem PC und seitdem niemals aktiv eine Defragmentierung durchführen müssen - alles schön im Hintergrund von alleine. ![]()
Dazu muß WM_MOVE nur für das erste GUI aktiviert werden. Der Einfachheit halber hab ich in meinem Bsp. die Schleife zum Durchlaufen des Array auskommentiert und fix auf das erste Element (GUI1) verwiesen. Für diesen Fall kann natürlich ein 1D-Array verwendet werden. Kannst du ja dann anpassen.
Um GUI2 wieder anzudocken mußt du kurz GUI1 bewegen, oder du definierst einen "Fangbereich" um die GUI1 und checkst, ob GUI2 in diesen eintritt. Wie das geht, kannst du dem anderen Bsp. (Andocken am Desktoprand) aus demselben Thread entnehmen.
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <Winapi.au3>
$gui1 = GUICreate("Nummer 1", 300, 300)
GUICtrlCreateGroup('Dockposition', 40, 40, 220, 220)
$r1 = GUICtrlCreateRadio('1', 240, 140, 15, 17)
GUICtrlSetState(-1, $GUI_CHECKED)
$r2 = GUICtrlCreateRadio('2', 140, 240, 15, 17)
$r3 = GUICtrlCreateRadio('3', 45, 140, 15, 17)
$r4 = GUICtrlCreateRadio('4', 140, 50, 15, 17)
GUICtrlCreateGroup('', -99, -99, 1, 1)
$gui2 = GUICreate("Ich bin gedockt", 200, 200, -1, -1, -1, $WS_EX_TOOLWINDOW)
Global $aDocks[2][4] = [[$gui1,$gui2,1,-1],[$gui2,$gui1,3,-1]]
; ['GUI-master','GUI-slave',dockPos,Abstand]
; dockPos: 1=rechts, 2=unten, 3=links, 4=oben
; Abstand: -1=SysMetrics Fensterrand, alle anderen Werte Pixelabstand zw. Fenstern
;=======================================================================================================
; Damit zwei Fenster wechselseitig reagieren, müssen beide im Array aufgeführt werden, einmal als Master
; und einmal als Slave.
; Dabei müssen die entgegengesetzten Flags für die Dockposition vergeben werden (1 u. 3 bzw. 2 u. 4)
;=======================================================================================================
GUISetState(@SW_SHOW, $gui2)
GUISetState(@SW_SHOW, $gui1)
; WM_MOVE registrieren:
GUIRegisterMsg($WM_MOVE, "WM_MOVE")
GUIRegisterMsg($WM_ACTIVATE, "WM_ACTIVATE")
; Ereignis WM_MOVE auslösen zum erstmaligen Positionieren der Fenster
_moved()
While True
$msg = GUIGetMsg()
Switch $msg
Case -3
Exit
Case $r1
$aDocks[0][2] = 1
$aDocks[1][2] = 3
_moved()
Case $r2
$aDocks[0][2] = 2
$aDocks[1][2] = 4
_moved()
Case $r3
$aDocks[0][2] = 3
$aDocks[1][2] = 1
_moved()
Case $r4
$aDocks[0][2] = 4
$aDocks[1][2] = 2
_moved()
EndSwitch
WEnd
Func _moved()
DllCall("User32.dll", "int", "PostMessageA", "hwnd", WinGetHandle($aDocks[0][0]), "int", $WM_MOVE, "int", 0, "int", 0)
EndFunc
Func WM_MOVE($hWndGUI)
;~ For $i = 0 To UBound($aDocks) -1
Local $i = 0
If WinGetHandle($aDocks[$i][0]) = $hWndGUI Then
Local $aPos1 = WinGetPos($aDocks[$i][0])
Local $aPos2 = WinGetPos($aDocks[$i][1]), $iDiff = 0
If $aDocks[$i][3] = -1 Then
Local $ret = DllCall("user32.dll", "int", "GetSystemMetrics", "int", 32)
If IsArray($ret) Then $iDiff = $ret[0]
Else
$iDiff = $aDocks[$i][3]
EndIf
Switch $aDocks[$i][2]
Case 1
WinMove($aDocks[$i][1], '', $aPos1[0]+$aPos1[2]+$iDiff, $aPos1[1])
Case 2
WinMove($aDocks[$i][1], '', $aPos1[0], $aPos1[1]+$aPos1[3]+$iDiff)
Case 3
WinMove($aDocks[$i][1], '', $aPos1[0]-$iDiff-$aPos2[2], $aPos1[1])
Case 4
WinMove($aDocks[$i][1], '', $aPos1[0], $aPos1[1]-$iDiff-$aPos2[3])
EndSwitch
EndIf
;~ Next
Return $GUI_RUNDEFMSG
EndFunc
Func WM_ACTIVATE($hWndGUI)
If WinGetHandle($aDocks[0][0]) = $hWndGUI Then _
DllCall("User32.dll", "hwnd", "SetFocus", "hwnd", WinGetHandle($aDocks[0][1]))
Return $GUI_RUNDEFMSG
EndFunc
Hallo Oscar,
schon wieder versuchst du mir altersmäßig auf den Pelz zu rücken, aber im November wird der alte Abstand wieder hergestellt. ![]()
Ich wünsche dir Alles Gute, weiterhin Ideen ohne Ende und bleib, wie du bist. ![]()
@vassilis: Du alter Leichenschänder! ![]()
ZitatSonntag, 13. Januar 2008, 02:26
Keiner, der TV-Karten der Art benutzt? ![]()
meine als Konsole kompilierte Console
:very confused: ![]()
Gib uns die Infos:
- so sieht es aus
- so soll es aussehen
anhand von Bsp.
Hi,
ich brauch für meinen PC eine neue TV-Karte.
Folgendes sind meine minimalen Anforderungen:
SOLL:
- PCIe
- DVB-S
- Video-In (S-Video / Composite)
- TimeShifting
- IR-Fernbedienung
KANN:
- DVB-S2
- DVB-T
Ich habe nun mal das Web durchstöbert und die AVerTV Satellite Trinity gefunden, die eine sehr ansprechenden Funktionsumfang bietet.
Hat evtl. jemand Erfahrung mit dieser Karte (oder kennt jemanden, der wen kennt, der Erfahrungen hat.. :D)?
Oder habt ihr TV-Karten, die meinen Wünschen entsprechen, im Einsatz und seid wunschlos glücklich? Dann bin ich für jede Info dankbar, noch habe ich mich nicht festgelegt. ![]()
Hi,
ich melde mich mal schnell aus dem rumänischen Exil ![]()
Die aus meiner Sicht einfachste Lösung, ist die Kombination aus einer WENN-Abfrage und einem VERWEIS. Ist kein Aufwand und beliebig erweiterbar.
Bsp. ist angehängt.
@Reaker: Bitte keine Links auf Pastebin in den Threads! Diese sind spätestens nach 30 Tagen gelöscht (einzige Ausnahme: personifiziertes Pastebin) und somit kann später niemand nachvollziehen, was passiert ist.
Gibts im IRC ne Funktion um die Userlist im channel abzurufen damit ich diese vom BNC an mein IRC prog senden kann?
Gibt es: /WHO kanal
Kann aber sein, dass das nicht mit allen Clients funktioniert.
Probier mal (ungetestet):
Func _IRCListUser ($irc, $chan)
If $irc = -1 Then Return 0
TCPSend($irc, "WHO " & $chan & @CRLF)
If @error Then
MsgBox(1, "IRC.au3", "Server has disconnected.")
Return -1
EndIf
Return 1
EndFunc
Die Listung erfolgt dann im im TCPRecv. Dort mußt du es rausfiltern.
Kannst dir ja auch mal das ansehen - vielleicht kannst du davon was verwenden.
Tipp:
Nicht in den Standard-Include Ordner einfügen, sondern Wahlmöglichkeit lassen. Ich verwalte UDF's in einem separaten Ordner, der in "SciTE Config" als "User Include Dir" eingetragen wurde.
Andere Variante:
[autoit]$s = "Chr(54) & Chr(55) & Chr(53)"
MsgBox(0, '', StringRegExpReplace(StringRegExpReplace(StringRegExpReplace($s, '\s&\s', ','), 'Chr\(', ''), '\)', '') )
Lies dir mal die Syntaxbeschreibung durch. ![]()
_FileReadToArray("Pfad", $Array)
D.h. für dein Bsp.: die Variable $decode ist das Array!
Du willst aber nur einen String splitten - also brauchst du _FileReadToArray() gar nicht.
Ja, du mußt folgende Codezeile aus der Funktion abändern:
[autoit]If $sLastCell = "R1C1" And $oExcel.Activesheet.Cells($iLastRow, $iLastColumn).Value = "" Then Return $avRET
[/autoit]
zu:
If $sLastCell = "Z1S1" And $oExcel.Activesheet.Cells($iLastRow, $iLastColumn).Value = "" Then Return $avRET
[/autoit]dann sollte es mit allen Versionen laufen.
Exakt das Problem hatten wir vor ein paar Tagen: [ gelöst ] Falsches Datums Format im Array
Edit:
Der Bernd war schneller.