1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. BugFix

Beiträge von BugFix

  • Exceldiagram in Autoit einfügen.

    • BugFix
    • 11. Oktober 2012 um 11:26

    Hier mal ein Bsp.:

    Spoiler anzeigen
    [autoit]

    Const $xlColumns = 2
    Const $xl3DPieExploded = 70
    Const $xlDataLabelsShowValue = 2

    [/autoit] [autoit][/autoit] [autoit]

    Local $oExcel = ObjCreate("Excel.Application") ; Excel-Objekt erstellen
    $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) ; Sheet-Objekt für Sheet 1 erstellen (Name oder Index)
    $oSheet.Name = 'Mein Sheet' ; Eigenschft Name ändern

    [/autoit] [autoit][/autoit] [autoit]

    ; oder vorhandene Datei öffnen:
    ;~ Local $oBook = $oExcel.WorkBooks.Open($sFilePath, Default, False)
    ;~ Local $oSheet = $oBook.Worksheets.Item(1) ; Index od. Name des Sheets

    [/autoit] [autoit][/autoit] [autoit]

    ; Daten in neuem Sheet eintragen

    [/autoit] [autoit][/autoit] [autoit]

    ; Die Range-Offset-Adressierung ermöglicht einfaches Navigieren mit Schleifen

    [/autoit] [autoit][/autoit] [autoit]

    ; Syntax: NewRange = Objekt.Range("StartZelle").Offset(ZeilenOffset, SpaltenOffset)
    ; Offset=0 ist die betreffende Zeile/Spalte selbst, die Adressierung ist relativ zur StartZelle
    ; negative Werte betreffen also Zeilen/Spalten oberhalb/vor der StartZelle

    [/autoit] [autoit][/autoit] [autoit]

    ; Spaltenbeschriftung B1:H1
    For $i = 0 To 7
    If $i = 7 Then
    $oSheet.Range("B1").Offset(0, $i).Value = 'SUMME'
    Else
    $oSheet.Range("B1").Offset(0, $i).Value = 'HEADER ' & $i+1
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ; Zeilenbeschriftung A2:A10
    For $i = 0 To 8
    $oSheet.Range("A2").Offset($i, 0).Value = 'NAME ' & $i+1
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ; Werte eintragen B2:H10
    For $i = 0 To 8
    For $j = 0 To 6
    $oSheet.Range("B2").Offset($i, $j).Value = Random(8,30,1)
    Next
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ; Formeln Summen Zeilen und Summe gesamt
    Local $r = 2
    For $i = 0 To 9
    If $i = 9 Then
    $oSheet.Range("I2").Offset($i, 0).Formula = "=SUMME(I2:I10)"
    Else
    $oSheet.Range("I2").Offset($i, 0).Formula = "=SUMME(B"&$r&":H"&$r&")"
    $r += 1
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ; Diagramm im $oSheet erstellen
    ; Um die Positionierung des Diagramms an einer Zelle auszurichten, kann man die Werte vorab abfragen
    ; und das Diagramm gleich mit diesen Parametern erstellen, oder anschließend verschieben

    [/autoit] [autoit][/autoit] [autoit]

    Local $width = 300, $height = 200

    [/autoit] [autoit][/autoit] [autoit]

    ; Ausrichtung linksbündig an Zelle B13:
    ;~ Local $left = $oSheet.Range("B13").Left
    ;~ Local $top = $oSheet.Range("B13").Top

    [/autoit] [autoit][/autoit] [autoit]

    ; Ausrichtung rechtsbündig an Zelle I13:
    Local $left = $oSheet.Range("J13").Left - $width ; Zelle J13: left = Zelle I13: right !
    Local $top = $oSheet.Range("I13").Top

    [/autoit] [autoit][/autoit] [autoit]

    ; Objekt Diagramm erstellen
    Local $oChart = $oSheet.ChartObjects.Add($left, $top, $width, $height).Chart

    [/autoit] [autoit][/autoit] [autoit]

    With $oChart
    .ChartType = $xl3DPieExploded ; Diagrammtyp festlegen
    .SetSourceData($oSheet.Range("I2:I10"), $xlColumns) ; Datenbereich für Diagramm
    .SeriesCollection(1).XValues = "='Mein Sheet'!Z2S1:Z10S1" ; Beschriftung Legende setzen (Namen aus A2:A10)
    .HasTitle = True ; Titel aktivieren
    .ChartTitle.Characters.Text = "Einzelsummen / Name (Gesamt = " & $oSheet.Range('I11').Value & ")" ; Titel
    .ApplyDataLabels($xlDataLabelsShowValue, False, True) ; Segmente Beschriften mit Werten
    EndWith

    [/autoit] [autoit][/autoit] [autoit]

    ; Diagramm (Zeichnungsfläche=Shape) ausrichten, wenn nicht vorab positioniert
    ;~ With $oSheet
    ;~ .Shapes(1).Top = $oSheet.Range("B13").Top ; Ausrichtung Top an Zelle B13.top
    ;~ .Shapes(1).Left = $oSheet.Range("B13").Left ; Ausrichtung Left an Zelle B13.left
    ;~ .Select
    ;~ EndWith

    [/autoit]

    Edit:
    Oops, ich sehe gerade du willst das Diagramm exportieren, hatte ich falsch verstanden. ;)

    Versuch erst mal manuell ob folgendes geht:
    - Diagramm markieren
    - Druckbereich festlegen
    - Drucken auf PDF-Drucker (pdf-Dateien kannst du in deine Präsentation einbasteln), -- wird dabei das Diagramm gedruckt?
    - PDF- Datei in Präsentation einfügen bzw. ersetzen

    Wenn du das zusammenbekommst, jeden einzelnen Schritt notieren -- dann kann man sich an die Automatisierung machen. Auch Powerpoint ist m.W. per AutoIt ansprechbar.

  • Abfrage des Checkbox-Status eines fremden Fensters

    • BugFix
    • 11. Oktober 2012 um 11:22
    Zitat von m-obi

    Aber auf der Applikation kann er doch auch die ID ermitteln mit dem Window Info Tool.


    Sofern dort eine ID ermittelbar ist - ja. Das ist aber nicht immer der Fall und es kommt auch vor das die ID nicht fix ist, also bei jedem Programmaufruf eine neue vergeben wird. Ich verwende i.A. CLASS + INSTANCE oder CLASSNAME, das ist treffsicherer.

  • Alles Gute! progandy wird 22!

    • BugFix
    • 11. Oktober 2012 um 00:40

    Alles Gute wünsch ich dir.
    Laß uns noch recht oft an deinem Know-How teilhaben. :thumbup:

  • Abfrage des Checkbox-Status eines fremden Fensters

    • BugFix
    • 10. Oktober 2012 um 23:55
    Zitat von m-obi

    @MG: Wieso extra ControlGetHandle?? Du nutzt doch nur die ID. Wozu das Handle?


    Im Bsp. von MG würde die ID reichen.
    Der TE schreibt aber:

    Zitat

    auf der Oberfläche einer anderen Applikation befindet

    und somit ist der Weg über das Handle durchaus zu empfehlen.

  • Listview und @CRLF...Win7=Ja WinXp=Nein

    • BugFix
    • 10. Oktober 2012 um 21:18
    Zitat von JaneDoe

    Wieso hat das da nichts zu suchen ?


    Weil das Listview-Control nicht für MultiLine-Darstellung gedacht ist.

  • Listview und @CRLF...Win7=Ja WinXp=Nein

    • BugFix
    • 10. Oktober 2012 um 20:59

    Das dürfte ein Fehler in Win7 sein. Ein Zeilenumbruch hat in einem ListviewItem nunmal überhaupt nix zu suchen.

  • Adventskalender für Freundin

    • BugFix
    • 10. Oktober 2012 um 15:45
    Zitat von Gianni

    Was könnte man aber einer Frau schenken?

    Wenn du jemanden findest, der diese Frage umfassend und zufriedenstellend beantworten kann, werde ich ihn für den Nobelpreis vorschlagen. :rofl:

    Wenn du einer Frau etwas schenkst, kannst du nur verlieren - aber auch wenn du ihr nichts schenkst. Ein klassisches Dilemma.
    Bsp. - Du schenkst ihre Lieblingsparalinen:
    "Das ist aber lieb von dir. Aber die haben ja sooo vieeel Kalorien! - Du willst doch nicht etwa, dass ich DICK WERDE?!"

    - Du schenkst ihr nichts:
    "Was, nicht mal eine lumpige Packung Pralinen bin ich dir wert??"

    Wie du es machst - es wird immer falsch sein. :D

  • Abfrage des Checkbox-Status eines fremden Fensters

    • BugFix
    • 10. Oktober 2012 um 13:54

    Bei Fremdanwendungen brauchst du Titel/Handle des Fensters, ID/classname des Controls und kannst dann mit

    [autoit]

    ControlCommand('title', 'text', 'id / classname', 'IsChecked', '')

    [/autoit]

    den Status abfragen.

  • Gui_Event_Close mit mehreren GUIs

    • BugFix
    • 10. Oktober 2012 um 13:38

    :D
    Ich bezog mich mit meinem Bsp. auf die reine Fragestellung des TE. :P

  • Gui_Event_Close mit mehreren GUIs

    • BugFix
    • 10. Oktober 2012 um 11:13

    @m-obi
    Deine Variante ist aber recht aufwändig und wirkt unübersichtlich.
    Kürzer tuts auch. ;)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    $Gui1 = GUICreate("Erste GUI", 200, 200, -1, -1)
    $Button1 = GUICtrlCreateButton("Zweite GUI zeigen", 10, 30, 120, 25)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    $Gui2 = GUICreate("Zweite GUI", 200, 200, -1, -1)
    $Button2 = GUICtrlCreateButton("Zurück zu GUI_1", 10, 30, 120, 25)
    GUISetState(@SW_HIDE)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetOnEvent(-3, '_close', $Gui1)
    GUISetOnEvent(-3, '_close', $Gui2)
    GUICtrlSetOnEvent($Button1, '_clickButton')
    GUICtrlSetOnEvent($Button2, '_clickButton')

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(100)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _close()
    Switch @GUI_WinHandle
    Case $Gui1
    Exit
    Case $Gui2
    GUISetState(@SW_HIDE, $Gui2)
    EndSwitch
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _clickButton()
    Switch @GUI_CtrlId
    Case $Button1
    GUISetState(@SW_SHOW, $Gui2)
    Case $Button2
    GUISetState(@SW_HIDE, $Gui2)
    EndSwitch
    EndFunc

    [/autoit]
  • Kfz-Kennzeichen

    • BugFix
    • 10. Oktober 2012 um 09:22

    Oscar
    Wird ziemlich aufwändig, das zu pflegen.
    Das Bundesverkehrsministerium hat es den Ländern freigestellt, bei Wunsch in den Regionen auch "alte" Kennzeichen wieder zuzulassen.
    Bsp.
    Der jetzige Bördekreis (BK vorm. BÖ) setzt sich aus etlichen ehemaligen Kreisen/Städten zusammen (Wanzleben-WZL, Oschersleben-OC ..).
    Es können aber nicht alle alten Kennz. wieder verwendet werden, da das hier verwendete BK früher der Stadt Backnang zugeteilt war. Die könnten also nicht ihr altes Kennz. wieder nutzen.
    Das wird noch ein heilloses Durcheinander geben... :whistling:

    Nichtsdestotrotz: Schön umgesetzt.

  • Handy kommuniziert mit Computer

    • BugFix
    • 8. Oktober 2012 um 20:45
    Zitat von Mr.SaxoI3eat

    ich möchte euch nur schnell demonstrieren


    Wäre nett, wenn du das tust. Z.B. in einem YouTube-Video.

    Ich denke kaum jemand wird eine unbekannte App einfach so auf seinem Handy installieren.

  • Windows 7 - "externe" Controls?

    • BugFix
    • 8. Oktober 2012 um 19:28

    Solltest du mit ReBar realisieren können.

  • Array nach der Häufigkeit des Inhaltes sortieren

    • BugFix
    • 8. Oktober 2012 um 16:40

    Als Tipp:
    Das Array ByRef übergeben, sonst wird es völlig unnütz beim Aufruf der Funktion kopiert.

    Ein 1D-Array nach Häufigkeit von Einträgen zu sortieren macht aber wenig Sinn. Da ja kein Partnerwert (wie bei einer Schlüssel-Wert-Verknüpfung) existiert, ist es doch völlig ohne Belang wo die Werte im Array abgelegt sind. Schlimmer noch: durch den Sortiervorgang wird auch noch die Verknüpfung Index-Wert zerrissen.
    Es gibt sicher Einsatzvarianten, wo das Sinn macht. Aber in der Regel ist man dort mit einem anderen Datentyp besser bedient.

  • StringRegExp Problem

    • BugFix
    • 8. Oktober 2012 um 16:29

    OK

    Also da hier in jedem Fall ein ODER gefragt werden muß, wirst du in einem Fall immer ein leeres Arrayelement haben.
    Kannst du aber recht einfach händeln:

    [autoit]

    $s1 = '<span title="Max Mustermann"><a href="www.google.de">Max Mus..mann</a></span>'
    $s2 = '<a href="www.google.de">Max Mustermann</a>'

    [/autoit][autoit][/autoit][autoit]

    ConsoleWrite(_GetMatch($s1) & @CRLF)
    ConsoleWrite(_GetMatch($s2) & @CRLF)

    [/autoit][autoit][/autoit][autoit]

    Func _GetMatch($sString)
    Local $sPatt = '<span title="([\w\s]+)">|<a href=[^>]+>([\w\s]+)</a>'
    Local $aRet = StringRegExp($sString, $sPatt, 3)
    If Not IsArray($aRet) Then Return ''
    If $aRet[0] = '' Then Return $aRet[1]
    Return $aRet[0]
    EndFunc

    [/autoit]
  • StringRegExp Problem

    • BugFix
    • 8. Oktober 2012 um 15:52
    Zitat von Alcros

    K4z : leider nein, das Ergebnis ist das selbe.
    @ Bugfix :
    Wenn ich in Input

    Code
    <span title="Max Mustermann"><a href="www.google.de">Max Mus..mann</a></span>


    schcreibe, erhalte ich das :
    [Blockierte Grafik: http://www.abload.de/img/or18yove.jpg]
    Wenn ich aber

    Code
    <a href="www.google.de">Max Mustermann</a>


    in die Input schreibe, kommt folgendes :
    [Blockierte Grafik: http://www.abload.de/img/or236ost.jpg]

    Und das Element 0 stört mich, und ich will wissen, ob ich das sofort in der RegExp verhindern kann, dass das gespeichert wird.

    Alles anzeigen


    OMG - Ist es wirklich so schwer eine eindeutige Frage zu stellen?
    Ich übersetze mal:

    Der Ausgangstext kann dieser:

    Code
    <span title="Max Mustermann"><a href="www.google.de">Max Mus..mann</a></span>

    oder jener:

    Code
    <a href="www.google.de">Max Mustermann</a>

    sein.
    Mit welchem Pattern erhalte ich in jedem Fall nur
    Max Mustermann
    als Lösung?

    Ist die Fragestellung so korrekt?

  • Zeile aus Array auswählen und in Variable speichern

    • BugFix
    • 8. Oktober 2012 um 15:43
    Zitat von ExChill

    1. Frage: Der erste Eintrag im Array hat, wenn ich "$processclick = GUICtrlRead($processlist)" benutze, nicht den Wert 0 sondern 6. Woran liegt das?
    2. Frage: Was muss ich bei den Fragezeichen eintragen, damit der richtige Wert beendet wird?


    zu 1.
    Du kannst nicht die ID des Listview verwenden, sondern mußt die ID des ausgewählten ListViewItem nutzen. Besser: Arbeite mit der Listview-UDF (s. Hilfe)

    zu 2.
    Da gehört die PID des zu schließenden Prozesses rein, also bei deinem Listview, der Eintrag aus SpaltenIndex 1 des selektierten Item.

  • Water hat Geburtstag!!!

    • BugFix
    • 8. Oktober 2012 um 13:46

    Hallo water,
    auch von mir Alle Gute.

    Und als Schmankerl gibt es eine Simulation deiner Geburtstagsparty, mußt nur noch deine Daten anpassen. :D

    Spoiler anzeigen
    [autoit]

    #include "AutoItObject.au3"

    [/autoit] [autoit][/autoit] [autoit]

    _AutoItObject_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    $o_water = _BirthdayPartyCreate('water')

    [/autoit] [autoit][/autoit] [autoit]

    $o_water.Gender = 'm'
    $o_water.Gewicht = 75

    [/autoit] [autoit][/autoit] [autoit]

    Local $sTimeLast, $indexDrink
    Local $Glas_Bier = 250, $ProzAlcBier = 5
    Local $Korn = 20, $ProzAlcKorn = 38
    Local $aDrink[2][2] = [[$Glas_Bier,$ProzAlcBier], [$Korn,$ProzAlcKorn]]

    [/autoit] [autoit][/autoit] [autoit]

    ; es geht los: ein Bier, hinterher ein Korn
    $o_water.Drink($Glas_Bier, $ProzAlcBier, '20:00')
    $o_water.Drink($Korn, $ProzAlcKorn, '20:05')
    $o_water.AnzahlBier = $o_water.AnzahlBier +1
    $o_water.AnzahlKorn = $o_water.AnzahlKorn +1
    $sTimeLast = '20:05'

    [/autoit] [autoit][/autoit] [autoit]

    ; und nun steigt die Party, Runde für Runde, alle 10 - 20 min wird getrunken
    ; mal ein Bier, mal ein Korn, rein zufällig -- aber bei 2,5 Promille ist Schluß ;)
    While $o_water.Promille <= 2.5
    $sTimeLast = _TimeAdd($sTimeLast, Random(10, 20, 1))
    $indexDrink = Random(0, 1, 1)
    $o_water.Drink($aDrink[$indexDrink][0], $aDrink[$indexDrink][1], $sTimeLast)
    If $indexDrink = 0 Then
    $o_water.AnzahlBier = $o_water.AnzahlBier +1
    Else
    $o_water.AnzahlKorn = $o_water.AnzahlKorn +1
    EndIf
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, 'Feierabend', 'Die Party ist beendet' & @CRLF & @CRLF & _
    'Die letzte Runde gab es um: ' & $sTimeLast & ' Uhr' & @CRLF & @CRLF & _
    'Pegelstand: ' & StringFormat('%.2f', $o_water.Promille) & ' ' & Chr(137) & @CRLF & @CRLF & _
    'getrunken wurden:' & @CRLF & _
    'Bier: ' & $o_water.AnzahlBier & @CRLF & _
    'Korn: ' & $o_water.AnzahlKorn )

    [/autoit] [autoit][/autoit] [autoit]

    Func _BirthdayPartyCreate($sName)
    Local $self = _AutoItObject_Create()
    _AutoItObject_AddProperty($self, 'Name', $ELSCOPE_READONLY, $sName)
    _AutoItObject_AddProperty($self, 'Gender', $ELSCOPE_PUBLIC, 'm')
    _AutoItObject_AddProperty($self, 'Gewicht', $ELSCOPE_PUBLIC, 85)
    _AutoItObject_AddProperty($self, 'tLastDrink', $ELSCOPE_PUBLIC, 0)
    _AutoItObject_AddProperty($self, 'Promille', $ELSCOPE_PUBLIC, 0)
    _AutoItObject_AddProperty($self, 'AnzahlBier', $ELSCOPE_PUBLIC, 0)
    _AutoItObject_AddProperty($self, 'AnzahlKorn', $ELSCOPE_PUBLIC, 0)
    _AutoItObject_AddMethod($self, 'Drink', "_DrinkAlc")
    Return $self
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _DrinkAlc(ByRef $self, $iMenge_ml, $iProzAlc, $iUhrZeit)
    #cs
    Widmark'sche Formel:

    [/autoit] [autoit][/autoit] [autoit]

    A Flüssigkeit in ml * Alkoholgehalt in % * 0.81
    /
    B Körpergewicht * 0.7 [w=0.6]
    C - Resorptionsdefizit
    D - Alkoholabbau
    = Blutalkoholgehalt in ‰
    #ce
    If $self.tLastDrink = 0 Then $self.tLastDrink = $iUhrZeit
    Local $iTimeDiff = _TimeDiff($self.tLastDrink, $iUhrZeit)
    Local $iFactor = 0.7
    If $self.Gender = 'w' Then $iFactor = 0.6
    Local $A, $B, $C, $D
    $A = $iMenge_ml * $iProzAlc / 100 * 0.81
    $B = $self.Gewicht * $iFactor
    $C = 0.2 * $A / $B
    $self.Promille = $self.Promille + ($A / $B - $C)
    $D = $iTimeDiff * 0.15
    If $D > 0 Then
    $self.Promille = $self.Promille - $D
    If $self.Promille < 0 Then $self.Promille = 0
    EndIf
    $self.tLastDrink = $iUhrZeit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _TimeDiff($t1, $t2)
    Local $iPos = StringInStr($t1, ':')
    If $iPos Then $t1 = StringLeft($t1, $iPos-1) + StringTrimLeft($t1, $iPos) * 1/60
    $iPos = StringInStr($t2, ':')
    If $iPos Then $t2 = StringLeft($t2, $iPos-1) + StringTrimLeft($t2, $iPos) * 1/60
    Local $iDiff = $t2 - $t1
    If $iDiff < 0 Then $iDiff = ($t2 + 24) - $t1
    Return $iDiff
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _TimeAdd($t1, $iDiff)
    Local $iPos = StringInStr($t1, ':')
    If $iPos Then $t1 = StringLeft($t1, $iPos-1) + StringTrimLeft($t1, $iPos) * 1/60
    $t1 += ($iDiff * 1/60)
    If $t1 >= 24 Then $t1 -= 24
    Local $iHour = Int($t1), $iMin = Ceiling(($t1 - $iHour) * 60)
    Return $iHour & ':' & StringFormat('%02d', $iMin)
    EndFunc

    [/autoit]
  • Registrierung im Forum

    • BugFix
    • 8. Oktober 2012 um 09:52

    Soweit ich weiß, gibt es z.Zt. Probleme mit dem MailServer.

  • StringRegExp Problem

    • BugFix
    • 7. Oktober 2012 um 21:31
    Zitat von Alcros

    klappt alles.


    Du solltest dir angewöhnen dein Problem nachvollziehbar zu beschreiben. Was bedeutet "klappt alles"?
    Besser ist:
    - Text vorher
    - gewünschtes Ergebnis

    Dann kann man auch konkret helfen.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™