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. name22

Beiträge von name22

  • funktionen lösen

    • name22
    • 10. März 2012 um 17:05

    Naja... Es gibt den Befehl

    [autoit]

    Execute()

    [/autoit]

    Aber der erkennt auch alle anderen AutoIt Befehle, wie zum Beispiel Exit. Falls ein Nutzer also diesen Term selbst eingeben kann, könnte er auch dein Script zum Absturz bringen oder sonstnochwas machen. Für gewöhnlich löst man das, indem man die Eingabe mittels StrinRegExpReplace "säubert".

  • GDI + viel zu langsam ..

    • name22
    • 10. März 2012 um 17:03

    Das Bild wird einmal in voller Größe in den Arbeitsspeicher geladen und dann in unterschiedliche Größen skaliert. Dabei wird ein Interpolationsmodus angewendet und der macht dein Script langsam (und das Bild hübsch).
    Abgesehen davon ist das längst nicht das einzige Problem in deinem Script.. Es werden z.B. keinerlei Ressourcen bei Scriptende aus dem Arbeitsspeicher entfernt und 2 Grafik Objekte brauchst du auch nicht, das macht gar keinen Sinn.

  • GDI + viel zu langsam ..

    • name22
    • 10. März 2012 um 16:56

    Wozu benötigst du bitte 2 Grafiken vom sleben Fenster? 8| ...

    Zitat

    Normal ist dies auf jeden Fall nicht.


    Doch. Das ist völlig normal bei solch ineffizienter Programmierung...
    Erstens benötigt die Interpolation von Bildern bei Skalierung, je nach Interpolationsmodus, enorm viel Zeit. Und da du nicht z.B. das Bild in der benötigten Größe zwischenspeicherst o.Ä. Dauert das möglicherweise sehr lange.

  • Bild in GUI in guter Qualität einbinden

    • name22
    • 10. März 2012 um 16:52

    Du kannst auch GDIPlus verwenden. Das hat einen Interpolationsmodus mit relativ hoher Qualität.

  • GDIplus: Frage zu GraphicsDispose, etc

    • name22
    • 10. März 2012 um 16:51

    Es ist nicht sehr empfehlenswert direkt auf das Desktopfenster zu zeichnen... Sonst versuchen nämlich Windows und dein Programm zu verschiedenen Zeiten das Bild zu aktualisieren und kommen sich in die Quere.
    Und ein Transparentes Bild wird dein Problem auch nicht lösen. Je nach Modus würde GDI+ entweder die darunterliegenden Pixel auf den Farbwert 0 setzen (schwarzes Rechteck), oder gar nichts verändern (transparent auf Rot ist immer noch Rot ;)).
    Mach lieber ein Mehrschichtiges transparentes Fenster über den ganzen Desktop, oder die gewünschte Stelle und zeichne da drauf herum. Dann kannst du die Grafik auch mit GraphicsClear($hGraphics, 0) wieder "zurücksetzen".
    Ich hab dazu mal ein Beispiel gemacht.

  • GDI+ Spielerei 3D-Linien

    • name22
    • 10. März 2012 um 14:13

    Danke für die Erklärung :). Ich werd mal schauen ob ich aus deinem Beispiel schlau werde.

  • Suche "Mausdreher"

    • name22
    • 10. März 2012 um 13:29

    Erstens kannst du diesen Bot dann ohne Probleme umschreiben um ihn auch für Online Spiele zu verwenden, zweitens würden sich die Requests auch für Onlinespiel-Bots vervielfachen. Schließlich haben wir ja jetzt schon mehr als genug davon, obwohl keine Art von Bot erlaubt ist.
    Außerdem war diese Regelung eine Entscheidung die schon vor Jahren getroffen wurde, und ich glaube dass es eine gute Entscheidung war, wenn ich mir andere AutoIt Foren anschaue... Geändert wird daran sowieso nichts mehr.


    Edit: BugFix
    Der Troll muß auch nicht weiter gefüttert werden.
    Thema erledigt.
    [CLOSED]

  • Bild wird nicht angezeigt

    • name22
    • 10. März 2012 um 12:38

    Steht auch in der Hilfe zu GUICtrlCreatePic :rolleyes: ... Die einzigen unterstützten Formate sind JPEG, BMP und nicht animierte GIF. PNG musst du mit GDI+ o.Ä. umsetzen, das geht nicht mit den Standard AutoIt GUI Funktionen.

  • Partikelexplosion in 3D ?

    • name22
    • 10. März 2012 um 12:30
    Zitat

    Wird ein Partikel nicht mehr gebraucht wird sein Vx Wert auf 0 gesetzt und dementsprechend in der schleife übersprungen.


    Genau so meinte ich das auch ^^.

  • GDI+ Spielerei 3D-Linien

    • name22
    • 10. März 2012 um 12:27

    Wow, sieht cool aus :thumbup: . Mir gefällt besonders die Steuerung mit den Pfeiltasten. Wie verwendest du eigentlich die PathWarp Funktion um den 3D Look zu erzielen? Also nach welcher Rechnung gehst du da vor. Das würde mich echt interessieren :).

  • PenGuin ist 18!

    • name22
    • 10. März 2012 um 12:20

    Nen schönen 18ten Geburtstag Pinguin :D. Das soll ja der beste Geburtstag schlechthin sein, also feier auch ordentlich. ;)

  • Partikelexplosion in 3D ?

    • name22
    • 9. März 2012 um 18:12

    Sieht cool aus. Ich hab mittlerweile meine alte Partikelexplosion (geistert hier vielleicht auch noch irgendwo durchs Forum) ein wenig ausgebessert (es ist jetzt keine rechteckige Begrenzung mehr) und effizienter gestaltet. Jetzt ist das ganze als Screensaver im Einsatz. Aber auf die Idee einer 3D Explosion mit GDI+ bin ich noch nicht gekommen. Ich bin gespannt was daraus noch wird ;).

    Zitat

    Dieser Vorgang dauert aber leider unzumutbar lange (da das Array ja entpsrechend groß wird bei vielen Partikeln).


    Wie wäre es denn, wenn du die entsprechenden Elemente einfach übrspringen lässt? Vielleicht über ein zusätzliches Element in der 2ten Dimension für alle Partikel, das den "Lebensstatus" eines Partikels angibt. Eine kleine If-Abfrage die ggf. einen Schleifendurchlauf überspringt sollte nur einen Bruchtei einer Millisekunde in Anspruch nehmen.. RAM sparst du dadurch zwar nicht, aber zumindest kannst du Paritkel "löschen" ^^.

  • Ini Datei auslesen und anwenden

    • name22
    • 4. März 2012 um 19:06
    Zitat

    Aus deiner PN schließe ich, dass du meinen Beitrag zu wörtlich genommen hast. Das hier war nur ein Beispiel.. Die Funktion mit der MsgBox musst du natürlich durch das ersetzen was letztendlich deine Daten verarbeitet. Es wäre wahrscheinlich wesentlich einfacher dir zu helfen, wenn du mal genauer beschreibst, was du machen willst...

  • Ini Datei auslesen und anwenden

    • name22
    • 4. März 2012 um 16:06

    Wie wäre es, wenn du mit IniReadSection alles aus der Datei in ein Array einließt, und dann das Array komplett durchläufst und die Daten darin verarbeitest?
    Also in etwa so:

    [autoit]

    $aData = IniReadSection(@ScriptDir & "\Data.ini", "TestSection")

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

    For $i = 1 To $aData[0][0]
    _IrgendeineFunktion($aData[$i][0], $aData[$i][1]) ;Hier werden dann die Daten verarbeitet.
    Next

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

    Func _IrgendeineFunktion($sKey, $sValue)
    MsgBox(64, "Data", $sKey & " = " & $sValue)
    EndFunc

    [/autoit]


    Die Ini würde dann z.B. so aussehen:

    Code
    Test=Hallo
    Red=0xFF0000
    Green=0x00FF00
    Blue=0x0000FF


    Wenn du eine vorher nicht festgelegte Menge an Daten verarbeiten willst, ist es grundsätzlich besser Arrays zu verwenden.

    Edit: Aus deiner PN schließe ich, dass du meinen Beitrag zu wörtlich genommen hast. Das hier war nur ein Beispiel.. Die Funktion mit der MsgBox musst du natürlich durch das ersetzen was letztendlich deine Daten verarbeitet. Es wäre wahrscheinlich wesentlich einfacher dir zu helfen, wenn du mal genauer beschreibst, was du machen willst...

  • GDI+ Absturz

    • name22
    • 4. März 2012 um 14:33

    Ich hab versucht die gröbsten Fehler aus deinem Script zu beseitigen. Leider ist von deinem Script danach nichts mehr übrig gewesen.
    Hast du eigentlich die letzten Beiträge von mir gelesen? Du machst nämlich genau die selben Fehler wie vorher, mit dem kleinen Unterschied, dass dieses Mal noch viel mehr drin sind...
    Die ReduceMemory Funktion ist kein Ersatz für die Dispose Funktionen die du jetzt aus irgendeinem schwachsinnigem Grund ganz entfernt hast.
    Und sie alle 50 Millisekunden anzuwenden, wird dir auch nicht dabei helfen, dein Programm effizienter zu gestalten. Besonders nicht wenn du bei jeder WM_PAINT Message das Bild erneut in den Arbeitsspeicher lädst, obwohl es schon da ist, ohne das alte zu löschen. Das sorgt dafür, dass dein RAM mit der Zeit immer weiter vollläuft. Die GUI und die Grafik erstellst du wieder 2 mal im Script, nur wird die GUI nie sichtbar geschaltet und die Grafik nie generiert weil _GDIPlus_startup nie aufgerufen wurde.
    Dann speicherst du Rückgabewerte von Funktionen wie _GDIPlus_GraphicsDrawImage etc. in Variablen obwohl du den Rückgabewert nie brauchst und auch nicht verwendest. Die Funktionen geben nur 1 bei Erfolg und 0 bei einem Fehler zurück - mehr nicht.
    Dann erstellst du eine Bitmap und ihren Grafikkontext als Backbuffer verwendest aber keines von beidem (und gibst es natürlich auch nicht wieder frei).
    Ich weiß nicht wie groß dein Bild ist, aber wenn es so groß ist wie die GUI selbst, dann brauchst du dich nicht wundern wenn dadurch ein Button oder mehrere verdeckt werden. Schließlich zeichnest du da einfach ein Bild drüber...
    Du tust praktisch alles, um möglichst viel Arbeitsspeicher zu verpulvern den du nie wieder freigibst, und versuchst das ganze dann mit einer Funktion im Griff zu halten die für externe Programme gedacht ist, wo du das Speichermanagement nicht kontrollieren kannst.
    Wie soll ich dich denn unterstützen wenn du meine Vorschläge komplett ignorierst und nur noch mehr Fehler einbaust, ohne gleich alles für dich zu machen? :huh:

  • GDI+ Absturz

    • name22
    • 3. März 2012 um 23:01
    Zitat

    also kann ich die Globals nicht wegmachen .


    Nein, aber eine Variable kann man auch deklarieren ohne ihr einen Wert zuzuweisen.

    Zitat

    Und was soll ich für GuiGetMsg() denn bitte einsetzen ?


    Gar nichts... Du sollst entweder GUISetOnEvent(-3, "end") entfernen, weil es nichts bewirkt. Oder das ganze auf den OnEventModus umschreiben..
    So macht dein Script genauso keinen Sinn, weil du den OnEventMode aktiviert hast, und dennoch GUIGetMsg verwendest.

    Ich würde an deiner Stelle die Vorteile von AutoItExitRegister ausnutzen, und EINE Exit Funktion machen die nichts weiter enthält als den Exit Befehl, und dann noch eine, die nichts außer den _GDIPlus_BlablaDispose Funktionen enthält. Exit in die Funktion einzubauen die beim beenden von AutoIt aufgerufen wird ist Blödsinn.
    Noch besser und einfacher ist es aber, wenn du die ganzen GDIPlus Objekte einmal am Anfang deklarierst und generierst und am Ende wieder löschst. Das laden eines Bildes, das erzeugen einer Grafik, oder einer Bitmap dauert vielleicht insgesamt ein paar Millisekunden.. Das ist Nichts, da kannst du es doch auch einfach bei jedem Scriptstart laden, unabhängig davon, ob es nun verwendet wird oder nicht. Auf den Arbeitsspeicher dürfte sich das auch so gut wie gar nicht auswirken.

  • GDI+ Absturz

    • name22
    • 3. März 2012 um 22:28

    Erstens, deine Endlossleife am Ende des Scripts könnte ne kleine Pause vertragen (so ca. Sleep(1000)). ;) Zweitens, Erzeugst du diverse Grafiken und Images 2 mal, und dann auch noch bevor _GDIPlus_Startup aufgerufen wurde, was für die Ausführung dieser Funktionen essentiell ist. Drittens, Du verwendest GUISetOnEvent ohne den OnEvent Modus einzuschalten und benutzt dann nachher trotzdem noch GUIGetMsg :huh:. Viertens, Beim Aufräumen löschst du nur die Hälfte der erzeugten GDI+ Objekte... Fünftens, ein Programm auf 2 verschiedene Arten zu beenden und nur bei einer die im RAM angelagerten Ressourcen zu entfernen. Sechstens (das Problem das dir aufgefallen ist), du musst die Funktion GraphicsDispose auch auf ein Handle zu einem Graphics Objekt anwenden, nicht auf das Handle deiner GUI...

  • GUI oder Controls drehen

    • name22
    • 3. März 2012 um 20:36

    Ohne jegliche Extratools (z.B. GDI+)? Nein. Ich bin mir ziemlich sicher, dass das nicht möglich ist.

  • AutoIt MsGBox oÔ?

    • name22
    • 2. März 2012 um 19:40
    Zitat

    By the way , sorry für die blöde Frage ;>


    Das war doch keine blöde Frage ;).

    Aber geschlossen werden die Threads hier nicht nachdem das Problem gelöst ist. Stell einfach das Präfix von "Offen" auf "Gelöst" um, indem du deinen ersten Beitrag bearbeitest.

  • AutoIt MsGBox oÔ?

    • name22
    • 2. März 2012 um 18:31

    Die AutoIt Hilfe ist dein Freund ;) (kann in Scite 4 AutoIt mit F1 geöffnet werden). Du musst den Rückgabewert der MsgBox überprüfen (If o.Ä.) und dann entsprechend reagieren. Das Script weiß von allein nicht was es machen soll (zum Glück ^^).
    Außerdem formulierst du deine If Abfrage besser so:

    [autoit]

    If $Passwort <> $Passwort2 Then
    MsGBox (0 , "Fehler" , "Passwörter sind nicht identisch.")
    Exit
    EndIf

    [/autoit]


    Das ist übersichtlicher und kürzer. In der Hilfe findest du auch die Bedeutungen aller anderen Operatoren (Stichwort "Operator").
    Falls du der Englischen Sprache nicht mächtig sein solltest, gibt es hier auch die deutsche Übersetzung zum Download. Den Link findest du zusammen mit einem Link zum AutoIt Tutorial in der Box "Wichtige Links" links am Rand der Seite.
    Das Tutorial und das Buch von unserem Admin möchte ich dir besonders ans Herz legen ;).

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™