1. Artikel
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forum
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Paules-PC-Forum.de
  2. Forum
  3. Programmierung
  4. XProfan
  5. Anregungen und Bugreports

Mauspositionen

  • H.Brill
  • 16. Dezember 2024 um 08:56
  • H.Brill
    Stammuser
    Reaktionen
    497
    Beiträge
    1.183
    • 16. Dezember 2024 um 08:56
    • #1

    Was auch noch interessant wäre, sind die Mauspositionen nicht nur auf dem Hauptfenster.

    Ein

    Code
    WindowMouseX(Fenster|Control])
    WindowMouseY(Fenster|Control])

    das die relativen x + y Positionen des angegebenen Fensters bzw. Controls (z.b. Gridbox) zurück gibt und ansonsten -1. Somit könnte man mit

    z. b.

    Code
    TrackMenu [fenster], x, y und TrackMenu([fenster], x, y)

    genau im richtigen Fenster das Menü anzeigen. Ist vielleicht auch für andere Zwecke nützlich, wenn

    man wissen möchte, wo und in welchem Fenster sich die Maus gerade befindet. Vielleicht ginge auch

    was mit Systemvariablen.

    Das fände ich besser, als nur %MouseX und %MouseY.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

    Einmal editiert, zuletzt von H.Brill (16. Dezember 2024 um 09:01)

  • Jens-Arne
    Schüler
    Reaktionen
    98
    Beiträge
    116
    • 10. Januar 2025 um 21:10
    • #2

    Probier es mal hiermit:

    Code
    declare ende%,hD%,hT%,hBende%
    
    PROC GetAbsWindowPosX1
      parameters handle hW
      declare b#,ret&
      dim b#,4*4
      @external("user32.dll","GetWindowRect",hW,b#)
      ret&=@long(b#,0)
      dispose b#
      return ret&
    ENDPROC 'GetAbsWindowPosX1
    
    PROC GetAbsWindowPosY1
      parameters handle hW
      declare b#,ret&
      dim b#,4*4
      @external("user32.dll","GetWindowRect",hW,b#)
      ret&=@long(b#,4)
      dispose b#
      return ret&
    ENDPROC 'GetAbsWindowPosY1
    
    PROC GetAbsWindowPosX2
      parameters handle hW
      declare b#,ret&
      dim b#,4*4
      @external("user32.dll","GetWindowRect",hW,b#)
      ret&=@long(b#,8)
      dispose b#
      return ret&
    ENDPROC 'GetAbsWindowPosX2
    
    PROC GetAbsWindowPosY2
      parameters handle hW
      declare b#,ret&
      dim b#,4*4
      @external("user32.dll","GetWindowRect",hW,b#)
      ret&=@long(b#,12)
      dispose b#
      return ret&
    ENDPROC 'GetAbsWindowPosY2
    
    PROC MouseAbsX 'absolute x-Mausposition
      Declare Point#,x&
      Dim Point#,8
      @external("user32.dll","GetCursorPos",Point#)
      x&=@long(Point#,0)
      Dispose Point#
      Return x&
    EndProc 'MouseX
    
    PROC MouseAbsY 'absolute y-Mausposition
      Declare Point#,y&
      Dim Point#,8
      @external("user32.dll","GetCursorPos",Point#)
      y&=@long(Point#,4)
      Dispose Point#
      Return y&
    EndProc 'MouseY
    
    PROC IsCaptionPresent
      parameters handle hW
      declare erg&
      if (@external("user32.dll","GetWindowLongA",hW,-16) & 12582912)=12582912 '-16=~GWL_STYLE, 12582912=~WS_CAPTION
        erg&=1
      else
        erg&=0
      endif
      return erg&
    ENDPROC 'IsCaptionPresent
    
    PROC GetCaptionHeight
      declare erg&
      erg&=@external("user32.dll","GetSystemMetrics",4) '~SM_CYCAPTION=4
      return erg&
    ENDPROC 'GetCaptionHeight
    
    PROC GetSmallCaptionHeight
      declare erg&
      erg&=@external("user32.dll","GetSystemMetrics",51) '~SM_CYSMCAPTION=51
      return erg&
    ENDPROC 'GetSmallCaptionHeight
    
    PROC GetWindowThickBorderWidth
      declare erg&
      erg&=@external("user32.dll","GetSystemMetrics",32) '~SM_CXFRAME=32
      return erg&
    ENDPROC 'GetWindowThickBorderWidth
    
    PROC GetWindowThinBorderWidth
      declare erg&
      erg&=@external("user32.dll","GetSystemMetrics",7) '~SM_CXFIXEDFRAME=7
      return erg&
    ENDPROC 'GetWindowThinBorderWidth
    
    PROC GetMenuHeight
      declare erg&
      erg&=@external("user32.dll","GetSystemMetrics",15) '~SM_CYMENU=15
      return erg&
    ENDPROC 'GetMenuHeight
    
    PROC CheckMenuPresent
      'Ergebnis: Menü-Handle des Fensters oder 0, wenn es kein Menü hat
      'Bei child windows ist das Ergebnis undefiniert!
      parameters handle hW
      declare erg&
      erg&=@external("user32.dll","GetMenu",hW)
      return erg&
    ENDPROC 'CheckMenuPresent
    
    PROC IsWindowSizeable
      parameters handle hW
      declare erg&
      if (@getstyle(hW,0) & $40000)=$40000
        erg&=1
      else
        erg&=0
      endif
      return erg&
    ENDPROC 'IsWindowSizeable
    
    '********** HAUPTPROGRAMM
    cls
    hT%=@create("TEXT",%HWnd,"im Dialog: MouseX=?, MouseY=?",10,10,@width(%HWnd)-20,20)
    hD%=@create("DIALOG",%HWnd,"Dialogfenster",300,300,500,400)
    hBende%=@create("BUTTON",%HWnd,"Ende",(@width(%HWnd)\2)-100,@height(%HWnd)-40,200,30)
    ende%=0
    settimer 50
    whilenot ende%
      waitinput
      if @iskey(27) or @clicked(hBende%)
        ende%=1
        while @iskey(27)
          sleep 25
        endwhile
      else
        if (MouseAbsX()>=@GetAbsWindowPosX1(hD%)) and (MouseAbsX()<=@GetAbsWindowPosX2(hD%)) and (MouseAbsY()>=@GetAbsWindowPosY1(hD%)) and (MouseAbsY()<=@GetAbsWindowPosY2(hD%))
          settext hT%,"im Dialog: MouseX="+@str$(MouseAbsX()-@GetAbsWindowPosX1(hD%))+", MouseY="+@str$(MouseAbsY()-@GetAbsWindowPosY1(hD%))
        else
          settext hT%,"im Dialog: MouseX=?, MouseY=?"
        endif
      endif
    endwhile
    killtimer
    end
    Alles anzeigen

    Es wird die Cursorposition relativ zu den Grenzen des Dialogfensters angezeigt, wenn die Maus sich darüber befindet.

    Die in diesem Beispiel nicht benutzten unteren PROCs können benutzt werden, um die Anzeige weiter zu verfeinern. Z.B. können damit die Titelzeile, der Fensterrand und das Menü eines Fensters herausgerechnet werden, um nur die Mauskoordinaten im Client-Bereich anzuzeigen.


    Und hier noch alle Funktionen aus dem obigen Beispiel als schnelle native DLL.

    Diese kann mit hDLL%=@ImportDll("mydll.dll","") eingebunden werden, dann sind alle Befehle wie im obigen Beispiel verfügbar. Die Profan-Procs können und müssen dann natürlich gelöscht werden, wenn kein expliziter Namespace für die DLL benutzt wird.

    Benenne die DLL so um, wie Du es haben möchtest (was besseres als mydll.dll ist mir gerade nicht eingefallen).


    Ach ja, eine 64bit-Version der DLL soll natürlich auch nicht fehlen. Wir wollen ja zukunftsfähig bleiben. :lol:

    Dateien

    mydll.zip 62,3 kB – 0 Downloads mydll64.zip 75,32 kB – 1 Download

    6 Mal editiert, zuletzt von Jens-Arne (10. Januar 2025 um 22:03) aus folgendem Grund: Ein Beitrag von Jens-Arne mit diesem Beitrag zusammengefügt.

  • H.Brill
    Stammuser
    Reaktionen
    497
    Beiträge
    1.183
    • 11. Januar 2025 um 07:31
    • #3

    Danke, sowas brauche ich öfter mal.

    Was für mich noch interessant ist, wäre die Möglichkeit Kontroll-Elemente (Buttons usw.)mit der Maus zu resizen. In einem anderen Thread habe ich mal gezeigt, wie man Kontroll-Elemente, Icons und Bitmaps verschieben und die neuen Koordinaten ermitteln kann.

    Code
    $H windows.ph
    $H messages.ph
    Declare Long x, appexit, Handle icon1, bmp1, hpic
    STRUCT RECT = Left&, Right&, Top&, Bottom&
    WindowTitle "Anklicken und verschieben "
    Window 800, 600
    x = 0
    Mcls 200, 100 , RGB(255, 0, 255)
    StartPaint  - 1
     DrawText 100, 30, "verschieb mich !", 6
    EndPaint
    icon1 = Create("Icon", %HWnd, "A", 450, 50, 1)
    bmp1 = Create("Bitmap", %HWnd, Create("hPic", 0, "&MEMBMP"), 450, 120)
    
    Var Text& = Create("Text",%hwnd,"veschieb mich",10,10,100,24)
    Var Group& = Create("Groupbox",%hwnd,"veschieb mich",10,60,300,300)
    Var Button& = Create("Button",%hwnd,"veschieb mich",140,10,100,24)
    
    Var R# = New(RECT)
    WhileNot appexit
     WaitInput
     ~EnumChildWindows(%hwnd, ProcAddr("MoveIt", 2), MakeLong(%mousex,%mousey))
     SetText %HWnd, "X1 : " + Str$(R#.Left&) + "  Y 1 : " + Str$(R#.Right&) + "  X2 " + Str$(R#.Top&) + "  Y2 : "+ Str$(R#.Bottom&)
     If %key = 2
       Dispose hdr#
       Dispose R#
       DeleteObject icon1, bmp1
       appexit = 1
     Endif
    EndWhile
    End
    
    Proc MoveIt
    Parameters wnd&,lParam&
       ~GetClientRect(wnd&, R#)
       ~MapWindowPoints(wnd&, %hwnd, R#, 2)
       If ~PtInRect(R#, LoWord(lParam&), HiWord(lParam&))
         ~ReleaseCapture()
         UseCursor 5
         SendMessage(wnd&, ~WM_SYSCOMMAND, ~SC_MOVE + 1, 0)
         UseCursor 0
         Return 0
       endif
    Return 1
    EndProc
    Alles anzeigen

    Wie bekommt man denn so einen Ziehrahmen, den man auch bei manchen Fenstern hat auf ein Control. So ähnlich, wie es bei den GUI-Designern gemacht wird, um die Proportionen zu ändern und die 4 Koordinaten zu speichern ? Also horiz. und vertik. und an den Ecken protportionial ? Das ~SC_MOVE ist ja fürs Verschieben. Vielleicht muß man dem Control auch einen gewissen Stil verpassen.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • Jens-Arne
    Schüler
    Reaktionen
    98
    Beiträge
    116
    • 11. Januar 2025 um 12:09
    • #4

    Puh, da hast Du uns aber eine Nuss zu knacken gegeben!!! Ich weiß nicht, ob es auch irgendwie einfacher geht, aber hier ist zumindest eine Lösung (Größenänderung von Controls mit der Maus; braucht mydll.dll von hier drüber):

    Code
    $H windows.ph
    $H messages.ph
    
    DEF %cSizingArtLeft 1
    DEF %cSizingArtUp 2
    DEF %cSizingArtRight 3
    DEF %cSizingArtDown 4
    DEF %cSizingArtLeftUp 5
    DEF %cSizingArtRightUp 6
    DEF %cSizingArtRightDown 7
    DEF %cSizingArtLeftDown 8
    
    declare _ende%,_hBende%,_hB1%,_hE1%,_hMyDll%
    declare _SensitiveAreaWidth%,_hInSensitiveArea%,_hControlSizing%,_SizingArt%,_InSizing%
    
    SUBCLASSPROC
      @Set("WinProc",1)
      if (%sMessage=~WM_MOUSEMOVE) or (%sMessage=~WM_NCMOUSEMOVE)
        if (@MouseAbsX()-@GetAbsWindowPosX1(&sWnd)<=_SensitiveAreaWidth%) or (@GetAbsWindowPosX2(&sWnd)-@MouseAbsX()<=_SensitiveAreaWidth%) or (@MouseAbsY()-@GetAbsWindowPosY1(&sWnd)<=_SensitiveAreaWidth%) or (@GetAbsWindowPosY2(&sWnd)-@MouseAbsY()<=_SensitiveAreaWidth%)
          _hInSensitiveArea%=&sWnd
          if (@MouseAbsX()-@GetAbsWindowPosX1(&sWnd)<=_SensitiveAreaWidth%) and (@MouseAbsY()-@GetAbsWindowPosY1(&sWnd)<=_SensitiveAreaWidth%) 'linke obere Ecke
            _SizingArt%=%cSizingArtLeftUp
            UseCursor 7
          elseif (@MouseAbsX()-@GetAbsWindowPosX1(&sWnd)<=_SensitiveAreaWidth%) and (@GetAbsWindowPosY2(&sWnd)-@MouseAbsY()<=_SensitiveAreaWidth%) 'linke untere Ecke
            _SizingArt%=%cSizingArtLeftDown
            UseCursor 8
          elseif (@GetAbsWindowPosX2(&sWnd)-@MouseAbsX()<=_SensitiveAreaWidth%) and (@MouseAbsY()-@GetAbsWindowPosY1(&sWnd)<=_SensitiveAreaWidth%) 'rechte obere Ecke
            _SizingArt%=%cSizingArtRightUp
            UseCursor 8
          elseif (@GetAbsWindowPosX2(&sWnd)-@MouseAbsX()<=_SensitiveAreaWidth%) and (@GetAbsWindowPosY2(&sWnd)-@MouseAbsY()<=_SensitiveAreaWidth%) 'rechte untere Ecke
            _SizingArt%=%cSizingArtRightDown
            UseCursor 7
          elseif (@MouseAbsX()-@GetAbsWindowPosX1(&sWnd)<=_SensitiveAreaWidth%) 'linke Seite
            _SizingArt%=%cSizingArtLeft
            UseCursor 9
          elseif (@GetAbsWindowPosX2(&sWnd)-@MouseAbsX()<=_SensitiveAreaWidth%) 'rechte Seite
            _SizingArt%=%cSizingArtRight
            UseCursor 9
          elseif (@MouseAbsY()-@GetAbsWindowPosY1(&sWnd)<=_SensitiveAreaWidth%) 'obere Seite
            _SizingArt%=%cSizingArtUp
            UseCursor 10
          elseif (@GetAbsWindowPosY2(&sWnd)-@MouseAbsY()<=_SensitiveAreaWidth%) 'untere Seite
            _SizingArt%=%cSizingArtDown
            UseCursor 10
          endif
        else
          UseCursor 0
          _hInSensitiveArea%=0
          _SizingArt%=0
        endif
      elseif (%sMessage=675) or (%sMessage=674) '675=~WM_MOUSELEAVE; 674=~WM_NCMOUSELEAVE (fehlen in den Headerdateien)
        UseCursor 0
        _hInSensitiveArea%=0
        _SizingArt%=0
      elseif (%sMessage=~WM_LBUTTONDOWN) or (%sMessage=~WM_NCLBUTTONDOWN)
        if _hInSensitiveArea%
          @Set("WinProc",0) 'verhindert, dass ein Button im gegriffenen Bereich als geklickt gilt
          _InSizing%=1
          LeaveWaitInput
        endif
      elseif (%sMessage=~WM_LBUTTONUP) or (%sMessage=~WM_NCLBUTTONUP)
        if _hInSensitiveArea%
          @Set("WinProc",0) 'verhindert, dass ein Button im gegriffenen Bereich als geklickt gilt
          _InSizing%=0
          beep
        endif
      endif
    ENDPROC 'SUBCLASSPROC
    
    PROC DoSize
      declare x%,y%,cx%,cy%,InitMouseX%,InitMouseY%,InitPosX1%,InitPosY1%,InitPosX2%,InitPosY2%
      InitMouseX%=@MouseAbsX()
      InitMouseY%=@MouseAbsY()
      InitPosX1%=@GetAbsWindowPosX1(_hInSensitiveArea%)-@GetAbsWindowPosX1(~GetParent(_hInSensitiveArea%))-@GetWindowThickBorderWidth()
      InitPosY1%=@GetAbsWindowPosY1(_hInSensitiveArea%)-@GetAbsWindowPosY1(~GetParent(_hInSensitiveArea%))-@GetCaptionHeight()-@GetMenuHeight()-@GetWindowThickBorderWidth()
      InitPosX2%=@GetAbsWindowPosX2(_hInSensitiveArea%)-@GetAbsWindowPosX1(~GetParent(_hInSensitiveArea%))-@GetWindowThickBorderWidth()
      InitPosY2%=@GetAbsWindowPosY2(_hInSensitiveArea%)-@GetAbsWindowPosY1(~GetParent(_hInSensitiveArea%))-@GetCaptionHeight()-@GetMenuHeight()-@GetWindowThickBorderWidth()
      while @iskey(~VK_LBUTTON) '%MousePressed=1
        UseCursor 3
        if _SizingArt%=%cSizingArtLeft
          x%=InitPosX1%+(@MouseAbsX()-InitMouseX%)
          y%=InitPosY1%
          cx%=InitPosX2%-(InitPosX1%+(@MouseAbsX()-InitMouseX%))
          cy%=InitPosY2%-InitPosY1%
        elseif _SizingArt%=%cSizingArtUp
          x%=InitPosX1%
          y%=InitPosY1%+(@MouseAbsY()-InitMouseY%)
          cx%=InitPosX2%-InitPosX1%
          cy%=InitPosY2%-(InitPosY1%+(@MouseAbsY()-InitMouseY%))
        elseif _SizingArt%=%cSizingArtRight
          x%=InitPosX1%
          y%=InitPosY1%
          cx%=InitPosX2%-(InitPosX1%+(InitMouseX%-@MouseAbsX()))
          cy%=InitPosY2%-InitPosY1%
        elseif _SizingArt%=%cSizingArtDown
          x%=InitPosX1%
          y%=InitPosY1%
          cx%=InitPosX2%-InitPosX1%
          cy%=InitPosY2%-(InitPosY1%+(InitMouseY%-@MouseAbsY()))
        elseif _SizingArt%=%cSizingArtLeftUp
          x%=InitPosX1%+(@MouseAbsX()-InitMouseX%)
          y%=InitPosY1%+(@MouseAbsY()-InitMouseY%)
          cx%=InitPosX2%-(InitPosX1%+(@MouseAbsX()-InitMouseX%))
          cy%=InitPosY2%-(InitPosY1%+(@MouseAbsY()-InitMouseY%))
        elseif _SizingArt%=%cSizingArtRightUp
          x%=InitPosX1%
          y%=InitPosY1%+(@MouseAbsY()-InitMouseY%)
          cx%=InitPosX2%-(InitPosX1%+(InitMouseX%-@MouseAbsX()))
          cy%=InitPosY2%-(InitPosY1%+(@MouseAbsY()-InitMouseY%))
        elseif _SizingArt%=%cSizingArtRightDown
          x%=InitPosX1%
          y%=InitPosY1%
          cx%=InitPosX2%-(InitPosX1%+(InitMouseX%-@MouseAbsX()))
          cy%=InitPosY2%-(InitPosY1%+(InitMouseY%-@MouseAbsY()))
        elseif _SizingArt%=%cSizingArtLeftDown
          x%=InitPosX1%+(@MouseAbsX()-InitMouseX%)
          y%=InitPosY1%
          cx%=InitPosX2%-(InitPosX1%+(@MouseAbsX()-InitMouseX%))
          cy%=InitPosY2%-(InitPosY1%+(InitMouseY%-@MouseAbsY()))
        endif
        SetWindowPos _hInSensitiveArea%=x%,y%-cx%,cy%
      endwhile
      if _SizingArt%=%cSizingArtLeftUp
        UseCursor 7
      elseif _SizingArt%=%cSizingArtLeftDown
        UseCursor 8
      elseif _SizingArt%=%cSizingArtRightUp
        UseCursor 8
      elseif _SizingArt%=%cSizingArtRightDown
        UseCursor 7
      elseif _SizingArt%=%cSizingArtLeft
        UseCursor 9
      elseif _SizingArt%=%cSizingArtRight
        UseCursor 9
      elseif _SizingArt%=%cSizingArtUp
        UseCursor 10
      elseif _SizingArt%=%cSizingArtDown
        UseCursor 10
      endif
      _InSizing%=0
    ENDPROC 'DoSize
    
    PROC LeaveWaitInput
      @SendMessage(%HWnd,$8000,0,0)
    ENDPROC 'LeaveWaitInput
    
    cls
    UserMessages $8000 'wird zum intentionalen Verlassen von Waitinput benutzt
    _hMyDll%=@ImportDll("mydll.dll","")
    _SensitiveAreaWidth%=5 'Breite des sensitiven Randbereiches in Pixeln , in dem das Control gegriffen werden kann
    _hB1%=@create("BUTTON",%HWnd,"Button: Resize Me!",50,50,150,50)
    _hE1%=@create("MULTIEDIT",%HWnd,"MULTIEDIT:\n\nResize Me!",50,150,150,100)
    _hBende%=@create("BUTTON",%HWnd,"Ende",(@width(%HWnd)\2)-100,@height(%HWnd)-40,200,30)
    subclass _hB1%,1
    subclass _hE1%,1
    _ende%=0
    whilenot _ende%
      waitinput
      if @iskey(27) or @clicked(_hBende%)
        _ende%=1
        while @iskey(27)
          sleep 25
        endwhile
      elseif _InSizing%
        DoSize
      elseif @clicked(_hB1%)
        beep
      endif
    endwhile
    subclass _hB1%,0
    subclass _hE1%,0
    FreeDll _hMyDll%
    UserMessages 0
    end
    Alles anzeigen

    Dieses Beispiel funktioniert nur mit einem Fenster, dass in der Größe veränderbar ist (einen dicken Rahmen hat), sowie eine Titelzeile und ein Menü hat. Wenn das anders ist, muss man das entsprechend mit den mydll.dll-Funktionen abfragen und die jeweils zutreffenden Funktionen benutzen, um am Anfang der PROC DoSize die genaue Position der Controls festzustellen.

    3 Mal editiert, zuletzt von Jens-Arne (11. Januar 2025 um 12:35)

  • Jens-Arne
    Schüler
    Reaktionen
    98
    Beiträge
    116
    • 11. Januar 2025 um 12:26
    • #5

    Ich habe gerade festgestellt, dass man mit

    Code
    SendMessage(wnd&, ~WM_SYSCOMMAND, ~SC_SIZE + 1, 0) '~SC_SIZE+1 bis +9 für die verschiedenen Resizing-Modi

    die Größenänderungen auch hinbekommen kann. Du kannst also auch Deine EnumChildWindows-Funktion dafür verwenden. Aber den Subclassing-Kram braucht man trotzdem, um im Randbereich der Controls die Pfeile angezeigt zu bekommen, die signalisieren, dass man jetzt die Größe ändern kann.

    Ich glaube nicht, dass es durch ~SC_SIZE einfacher wird. Man muss ja trotzdem vorher feststellen, welchen Resizing-Modus man braucht (also welche Kante(n) des Controls der Maus folgen soll(en)).

  • H.Brill
    Stammuser
    Reaktionen
    497
    Beiträge
    1.183
    • 11. Januar 2025 um 14:13
    • #6

    Geht ja schon in die richtige Richtung. + 8 erscheint mir da als bester Modus.

    Vielleicht finde ich in der MSDN ja noch was.

    Ich denke, daß man, wenn man beides möchte, ~S_MOVE und ~S_SIZE auf zwei Maustasten (linke + rechte) legen muß. Oder man bietet es in einem Menü an. Woher sollte dann auch Windows bzw. das Programm wissen, ob man jetzt verschieben oder resizen möchte.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • Jens-Arne
    Schüler
    Reaktionen
    98
    Beiträge
    116
    • 11. Januar 2025 um 14:37
    • #7

    Naja, verschieben in der Mitte und Größe ändern am Rand. Geht allerdings nicht mit Buttons, weil man die ja vielleicht auch anklicken möchte. Das kann man unterscheiden mit:

    Code
    if @ClassOf(hW&)="Button"
  • funkheld
    Fortgeschrittener
    Reaktionen
    3
    Beiträge
    364
    • 18. Januar 2025 um 13:53
    • #8

    Hallo H.Brill kommst du auch noch zum Schlafen mit deinen vielen Sachen hier im Forum?

    :sleeping::sleeping::sleeping:

  • H.Brill
    Stammuser
    Reaktionen
    497
    Beiträge
    1.183
    • 18. Januar 2025 um 17:16
    • #9
    Zitat von funkheld

    Hallo H.Brill kommst du auch noch zum Schlafen mit deinen vielen Sachen hier im Forum?

    :sleeping::sleeping::sleeping:


    Ja, schon. Bin ja auch seit 4 Jahren Renter und 67 Jahre alt. Im Winter hat man da ja öfter weniger bis garnichts draußen zu tun und drinnen kann man es sich ja aufteilen. Meine Postings hier im Forum finden ja auch nach dem Morgenkasffee (nach 7:00) und dem Schlafengehen (ab 22:00) statt.

    Also genug Zeit zum Ausschlafen.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • funkheld
    Fortgeschrittener
    Reaktionen
    3
    Beiträge
    364
    • 18. Januar 2025 um 18:53
    • #10

    Den Zeitlichen Rahmen habe ich so ungefähr erkannt bei dir...:sleeping::sleeping:

    Dann schau mal bitte ob du eine gute lösung findest mit Xprofan :

    Thema

    http://192.168.0.1/upload.cgi starten mit Xprofan.

    Hallo, guten Tag ihr Profis.



    Wie kann man bitte diese "http starten : http://192.168.0.1/upload.cgi" mit Xprofan.



    Danke.

    Gruss
    funkheld
    18. Januar 2025 um 13:30


    Danke.

    Gruss

  • H.Brill
    Stammuser
    Reaktionen
    497
    Beiträge
    1.183
    • 18. Januar 2025 um 19:22
    • #11

    Also, mit Netzwerk bzw. http hatte ich noch gar nichts gemacht. Mal etwas mit FTP und bplaced.net. Ist aber schon eine zeitlang her. Soweit ich weiß, laufen solche Scripte wie .cgi oder php doch auf Web-Servern. Ist das 192.168.0.1 dein Server in deinem Heimnetzwerk ? Normalerweise werden ja solche Nummern zugewiesen, wenn ein neues WLan-Gerät hinzu kommt. Das kann man dann im Router sehen.

    Was passiert denn, wenn du ein Browserfenster mit Create("HTMLWin", ...) diese URL als 2.Parameter rein schreibst ?

    Ansonsten habe ich da Null Ahnung. Sorry.

    PS: vielleicht schau mal bei PureBasic, das du ja auch kennst. Das hat ja solche Netzwerkgeschichten drin.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • funkheld
    Fortgeschrittener
    Reaktionen
    3
    Beiträge
    364
    • 18. Januar 2025 um 22:04
    • #12

    Danke für die Info.

    Damit kann ich jetzt mit XProfan4 Daten senden vom Notebook zum "The Spectrum" zur TOSHIBA mit flashair.

    Das Fenster Success öffnet sich , wo ich die Daten vom Notebook
    markieren kann.

    Gruss

    Code
    Declare Web&
    Declare page1$, page2$, page3$
    page1$ = "http://192.168.0.1/upload.cgi"
    Cls
    Web& = Create("HTMLWin",%hWnd,page1$,1+4,10,10,600,300)
    While 1
       WaitInput
    EndWhile
    End

    Dateien

    to.jpg 39,56 kB – 0 Downloads

    4 Mal editiert, zuletzt von funkheld (18. Januar 2025 um 23:03) aus folgendem Grund: Ein Beitrag von funkheld mit diesem Beitrag zusammengefügt.

  • funkheld
    Fortgeschrittener
    Reaktionen
    3
    Beiträge
    364
    • 19. Januar 2025 um 08:58
    • #13

    Warum ist hier so wenig los im Schlafsaal.....:sleeping::sleeping::sleeping::sleeping:

  • H.Brill
    Stammuser
    Reaktionen
    497
    Beiträge
    1.183
    • 19. Januar 2025 um 11:22
    • #14

    Scheinbar ist das Interesse nicht mehr so groß, wie es einst mal war. Gründe dafür kann es ja viele geben. Die jüngere Generation hat halt lieber Klicki Bunti mit Smartphone und die älteren, wie wir, werden immer weniger. Da es auch schon länger keine Updates zu XProfan4 gab, wandern natürlich auch einige ab. Auch Zeitmangel in der heutigen Zeit oder Des-Interesse kann ein Grund sein.

    Daher auch mein Appell an RGH :

    Biete eine kostenlose Art Schulversion (IDE + Interpreter) für kommende Updates bzw. eine neue Version 5 zum Download an. Somit steigt evtl. das Interesse, weil man die neuen Features auch erst mal ausprobieren kann, bevor man einen Kauf erwägt. Die alte Art und Weise (Kauf einer Subsription, Update oder Vollversion),um das Neue auszuprobieren, wird wohl nicht mehr funktionieren. Jedenfalls kämen da viel mehr Leute in den Genuß, das Neue auszuprobieren.

    Riesige Erfolge sind da natürlich nicht drin. Das sieht man ja auch bei anderen Nischensprachen. Aber eine Erhöhung des Bekanntheitsgrades schon eher. Z.B. in anderen Foren : Schau dir mal die Schulversion von XProfan 5 und den neuen Funktionen an. Vielleicht ist das das Richtige für dich. o. ä.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • H.Brill
    Stammuser
    Reaktionen
    497
    Beiträge
    1.183
    • 19. Januar 2025 um 12:33
    • #15

    Nachtrag :

    Auch was das kinderleichte Programmieren für Anfänger betrifft, kann ich (X)Profan nur wärmstens empfehlen. Ein CLS, Print und ein Waitkey genügen, um erste 'AHA - Erlebnisse' beim Ausprobieren von Befeheln und Funktionen zu garantieren. Da kommt auch PB's Debugger lange nicht mit. Eher im Gegenteil, wo er manchmal bei gewissen Konstellationen, kryptische Ausgaben, wo ich es nicht erwartet hatte, macht. Besonders zu erwähnen ist die steile Lernkurve bei Variablen, Listen usw. bis hin zu den Kontrollstrukturen und GUI. Das Sahnehäubchen ist natürlich die interne Listboxliste, die bei manchen Verarbeitungsfunktionen von Strings mit ihren Move-Funktionen sehr nützlich sein kann.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • funkheld
    Fortgeschrittener
    Reaktionen
    3
    Beiträge
    364
    • 19. Januar 2025 um 17:29
    • #16

    Ich habe ein gekaufte Version XProfan4 mit Update XProfan4a.

    Gruss

    Einmal editiert, zuletzt von funkheld (19. Januar 2025 um 17:36)

  • H.Brill
    Stammuser
    Reaktionen
    497
    Beiträge
    1.183
    • 19. Januar 2025 um 18:35
    • #17

    Und ich hatte an der Subscription mit teilgenommen, was preislich in etwa einem Update von X3, die ich ja auch habe, zu X4 entspricht.

    Und die ersten 10 Jahre hatte ich ein Update im Abo mit jährlich 80 DM und dann in EURO.

    Als die Updates weniger wurden, hatte es sich nicht mehr rentiert. Da war da normale Update deutlich günstiger. Da habe ich es gekündigt. Wenn ich aber diese 10 Jahre zusammen rechne, ist das alleine schon ein Happen Geld gewesen. Bereuen tue ich das jetzt aber im Nachhinein nicht.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

    2 Mal editiert, zuletzt von H.Brill (19. Januar 2025 um 18:56)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Windows 11

  1. Datenschutzerklärung
  2. Impressum
Community-Software: WoltLab Suite™