Button per Maus Bewegen-vergrößern wie beim Visual Designer

Anfängerfragen zum Programmieren mit PureBasic.
Thatsanee
Beiträge: 116
Registriert: 11.03.2005 05:12

Button per Maus Bewegen-vergrößern wie beim Visual Designer

Beitrag von Thatsanee »

Hi,

gibt es vom Visual Designer auch irgendwo den Source ?
Oder irgendwelche Beispiel wie das geht:
z.B. ein Button ins Fenster setzen und dann verschieben
und die größe ändern.

Wäre echt klasse wann ich darüber infos bekommen
könnte.

--------------------------------------------
Thatsanee
Zuletzt geändert von Thatsanee am 30.11.2005 23:15, insgesamt 2-mal geändert.
Benutzeravatar
FGK
Beiträge: 249
Registriert: 09.01.2005 14:02
Computerausstattung: i5-4430 CPU / 8GB RAM
GeForce GT630
Windows 10 Home / 64-bit
Wohnort: Augsburg

Beitrag von FGK »

Hallo Leute,


ich schließe mich diesem Wunsch ebenfalls an. Die Quellen könnten interessant sein.
Ich würde zusätzlich gerne erfahren wie man diese Größenänderungs-Punkte am besten erzeugt um die Gadgets schön komfortabel zu "resizen"


Gruß

FGK
Benutzeravatar
benpicco
Beiträge: 391
Registriert: 01.10.2004 15:32
Wohnort: im Code
Kontaktdaten:

Beitrag von benpicco »

Naja, wer weiß ob der Visual designer überhaupt mit PureBásic programmiert wurde, villeicht wurde dafür C++ benutzt...
Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

benpicco hat geschrieben:Naja, wer weiß ob der Visual designer überhaupt mit PureBásic programmiert wurde, villeicht wurde dafür C++ benutzt...
Der VisualDesigner ist in PureBasic geschrieben. Im Source wird nur minimal WinAPI verwendet. Für eine der ersten Versionen wurde auch mal der Source Veröffentlicht. Hab leider keinen link mehr dazu.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Donald
Beiträge: 307
Registriert: 03.01.2005 02:21
Wohnort: Marl

Beitrag von Donald »

ts-soft hat geschrieben: Der VisualDesigner ist in PureBasic geschrieben. Im Source wird nur minimal WinAPI verwendet. Für eine der ersten Versionen wurde auch mal der Source Veröffentlicht. Hab leider keinen link mehr dazu.
Schade, würde mich auch interessieren.
Vielleicht hat es sich ja einer damals geladen und stellt
es mal zum download bereit.
DONALD :D www.PureBasic-Donald.de gibt es im Moment nicht mehr
PureBasic - jaPBe - PureVisonXP - TailBite
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

länge?

Beitrag von Green Snake »

wisst ihr, wie lange der source vom vd ist?
das intressiert mich irgendwie. :allright:
-.-"
Thatsanee
Beiträge: 116
Registriert: 11.03.2005 05:12

Beitrag von Thatsanee »

Hi zusammen,

das Thema ist zwar schon eine weile her.

Sollte ich wirklich ein Thema getroffen haben was einige interessiert
und KEINER hat eine Umsetzung / Lösung dafür ? :cry:

Das kann ich kaum Glauben !!!
Thatsanee
Beiträge: 116
Registriert: 11.03.2005 05:12

Beitrag von Thatsanee »

Hroudtwolf hat geschrieben:Bitte sehr....
Hallo Hroudtwolf,
danke, aber es ist noch nicht das was ich Suche.

Hast Du auch noch eine "demo" mit der man mehrere Buttons
benutzen kann und auch die GRÖSSE verändern kann ?

Hab zwar selbst schon das eine oder andere ausprobiert,
aber so richtig klappt es nicht.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Hab mal etwas zusammengekritzelt, was unter Windows und Linux funzt.

Code: Alles auswählen

#MB_DOWN = 2
#MB_UP   = 4

#RESIZEBOX_WIDTH = 6
#RESIZEBOX_HEIGHT = 6

Structure SArea_Area
  ;Identifiers:
  ID.l
  
  ;Positions:
  X.l
  Y.l
  Width.l
  Height.l
EndStructure

Structure SArea_Box
  X.l
  Y.l
EndStructure


NewList Area_Area.SArea_Area()
Dim Area_Box.SArea_Box(7)

Procedure WindowMouseButton(Wnd, ButtonNr)
  
  CompilerIf #PB_Compiler_OS = #PB_OS_Linux
  ;Linux Version
  
  Protected gdkWnd.l, x.l, y.l, mask.l
  
  If Wnd
    *Window.GTKWindow = Wnd
    gdkWnd = *Window\bin\child\window
    gdk_window_get_pointer_(gdkWnd, @x, @y, @mask)
    
    Select ButtonNr
      Case 0
        If (mask & #GDK_BUTTON1_MASK)
          ProcedureReturn 1
        EndIf
      Case 1
        If (mask & #GDK_BUTTON3_MASK)
          ProcedureReturn 1
        EndIf
      Case 2
        If (mask & #GDK_BUTTON2_MASK)
          ProcedureReturn 1
        EndIf
    EndSelect
  EndIf
  
  CompilerElse
  ;Windows Version
  
  If Wnd And GetForegroundWindow_() = Wnd
    Select ButtonNr
      Case 0
        If GetAsyncKeyState_(#VK_LBUTTON) > 0
          ProcedureReturn 1
        EndIf
      Case 1
        If GetAsyncKeyState_(#VK_RBUTTON) > 0
          ProcedureReturn 1
        EndIf
      Case 2
        If GetAsyncKeyState_(#VK_MBUTTON) > 0
          ProcedureReturn 1
        EndIf
    EndSelect
  EndIf
  
  CompilerEndIf
  
  ProcedureReturn 0
EndProcedure

Procedure.l IsCoordOnArea(X.l, Y.l, AX.l, AY.l, AWidth.l, AHeight.l)
  If X >= AX And Y >= AY And (AX+AWidth) >= X And (AY+AHeight) >= Y
    ProcedureReturn 1
  EndIf
  ProcedureReturn 0
EndProcedure

Procedure.l CreateArea(x, y, width, height)
  Static CurrentID.l
  
  If width  < 0 : x + width  : width  * -1 : EndIf
  If height < 0 : y + height : height * -1 : EndIf
  
  CurrentID + 1
  
  AddElement(Area_Area())
  Area_Area()\ID = CurrentID.l
  Area_Area()\X  = x
  Area_Area()\Y  = y
  Area_Area()\Width  = width
  Area_Area()\height = height
  
  ProcedureReturn CurrentID
EndProcedure

Procedure.l DeleteArea(ID)
  ForEach Area_Area()
    If Area_Area()\ID = ID
      DeleteElement(Area_Area())
      Result = 1
      Break
    EndIf
  Next
  
  ProcedureReturn Result
EndProcedure

Procedure.l DrawAreas(WindowID, *Callback)
  Static MouseX.l, MouseY.l, oMouseX.l, oMouseY.l
  Static oLMouseButton.l, LMouseButton.l
  Static CurAreaSelected.l, CurBoxSelected.l
  Protected DeltaMouseX.l, DeltaMouseY.l, LMEvent.l
  
  oLMouseButton = LMouseButton
  LMouseButton = WindowMouseButton(WindowID, 0)
  
  oMouseX = MouseX
  oMouseY = MouseY
  MouseX = WindowMouseX()
  MouseY = WindowMouseY()
  DeltaMouseX = MouseX-oMouseX
  DeltaMouseY = MouseY-oMouseY
  
  If oLMouseButton <> 0 And LMouseButton = 0
    LMEvent = #MB_UP
  ElseIf oLMouseButton = 0 And LMouseButton <> 0
    LMEvent = #MB_DOWN
  EndIf
  
  If LMEvent = #MB_UP
    CurAreaSelected = 0
    CurBoxSelected = 0
    If Area_Area()\Width   < 0 : Area_Area()\X + Area_Area()\Width  : Area_Area()\Width  * -1 : EndIf
    If Area_Area()\Height  < 0 : Area_Area()\Y + Area_Area()\Height : Area_Area()\Height * -1 : EndIf
  EndIf
  
  ForEach Area_Area()
;     If Area_Area()\Width  < 0
;       Area_Area()\X + Area_Area()\Width
;       Area_Area()\Width  * -1
;       If CurBoxSelected <> 0
;         If CurBoxSelected <= 2 Or (CurBoxSelected <= 6 And CurBoxSelected >= 5)
;           CurBoxSelected + 2
;         Else
;           CurBoxSelected - 2
;         EndIf
;       EndIf
;     EndIf
;     If Area_Area()\Height  < 0
;       Area_Area()\Y + Area_Area()\Height
;       Area_Area()\Height  * -1
;       If CurBoxSelected <> 0
;         If CurBoxSelected <= 2 Or (CurBoxSelected <= 6 And CurBoxSelected >= 5)
;           CurBoxSelected + 2
;         Else
;           CurBoxSelected - 2
;         EndIf
;       EndIf
;     EndIf
    
    If *Callback
      x = Area_Area()\X
      y = Area_Area()\Y
      w = Area_Area()\Width
      h = Area_Area()\Height
      If w < 0 : x + w  : w  * -1 : EndIf
      If h < 0 : y + h  : h  * -1 : EndIf
      CallFunctionFast(*Callback, Area_Area()\ID, x, y, w, h)
    EndIf
    
    ;Border
    DrawingMode(2|4)
    Box(Area_Area()\X, Area_Area()\Y, Area_Area()\Width, Area_Area()\Height)
    
    DrawingMode(2)
    ;Cornerpoints
    Area_Box(0)\X = (Area_Area()\X - Int(#RESIZEBOX_WIDTH  * 0.5))
    Area_Box(0)\Y = (Area_Area()\Y - Int(#RESIZEBOX_HEIGHT * 0.5))
    Area_Box(1)\X = (Area_Area()\X - Int(#RESIZEBOX_WIDTH  * 0.5)) + Area_Area()\Width
    Area_Box(1)\Y = (Area_Area()\Y - Int(#RESIZEBOX_HEIGHT * 0.5))
    Area_Box(2)\X = (Area_Area()\X - Int(#RESIZEBOX_WIDTH  * 0.5)) + Area_Area()\Width
    Area_Box(2)\Y = (Area_Area()\Y - Int(#RESIZEBOX_HEIGHT * 0.5)) + Area_Area()\Height
    Area_Box(3)\X = (Area_Area()\X - Int(#RESIZEBOX_WIDTH  * 0.5))
    Area_Box(3)\Y = (Area_Area()\Y - Int(#RESIZEBOX_HEIGHT * 0.5)) + Area_Area()\Height
    
    Area_Box(4)\X = (Area_Area()\X - Int(#RESIZEBOX_WIDTH  * 0.5)) + Area_Area()\Width  * 0.5
    Area_Box(4)\Y = (Area_Area()\Y - Int(#RESIZEBOX_HEIGHT * 0.5))
    Area_Box(5)\X = (Area_Area()\X - Int(#RESIZEBOX_WIDTH  * 0.5)) + Area_Area()\Width
    Area_Box(5)\Y = (Area_Area()\Y - Int(#RESIZEBOX_HEIGHT * 0.5)) + Area_Area()\Height * 0.5
    Area_Box(6)\X = (Area_Area()\X - Int(#RESIZEBOX_WIDTH  * 0.5)) + Area_Area()\Width  * 0.5
    Area_Box(6)\Y = (Area_Area()\Y - Int(#RESIZEBOX_HEIGHT * 0.5)) + Area_Area()\Height
    Area_Box(7)\X = (Area_Area()\X - Int(#RESIZEBOX_WIDTH  * 0.5))
    Area_Box(7)\Y = (Area_Area()\Y - Int(#RESIZEBOX_HEIGHT * 0.5)) + Area_Area()\Height * 0.5
    
    ;Movement of the area
    If LMEvent = #MB_DOWN And IsCoordOnArea(MouseX, MouseY, Area_Area()\X+Int(#RESIZEBOX_WIDTH*0.5), Area_Area()\Y+Int(#RESIZEBOX_HEIGHT*0.5), Area_Area()\Width-#RESIZEBOX_WIDTH, Area_Area()\Height-#RESIZEBOX_HEIGHT) = 1
      
      If CurAreaSelected = 0 And CurBoxSelected = 0
        CurAreaSelected = Area_Area()\ID
        CurBoxSelected = 0
      EndIf
      
    ElseIf CurAreaSelected = Area_Area()\ID And CurBoxSelected = 0
      
      Area_Area()\X + DeltaMouseX
      Area_Area()\Y + DeltaMouseY
      
    EndIf
    
    ;Draw and check the resizeboxes
    For k=0 To 7
      Box(Area_Box(k)\X, Area_Box(k)\Y, #RESIZEBOX_WIDTH, #RESIZEBOX_HEIGHT)
      If LMEvent = #MB_DOWN And IsCoordOnArea(MouseX, MouseY, Area_Box(k)\X, Area_Box(k)\Y, #RESIZEBOX_WIDTH, #RESIZEBOX_HEIGHT) = 1
        
        If CurAreaSelected = 0 And CurBoxSelected = 0
          CurAreaSelected = Area_Area()\ID
          CurBoxSelected = k+1
        EndIf
        
      ElseIf CurAreaSelected = Area_Area()\ID And CurBoxSelected = k+1
        
        Select k
          Case 0 ;Left-Top
            Area_Area()\Width + (Area_Area()\X-MouseX)
            Area_Area()\X = MouseX
            Area_Area()\Height + (Area_Area()\Y-MouseY)
            Area_Area()\Y = MouseY
            
          Case 1 ;Right-Top
            Area_Area()\Width = (MouseX-Area_Area()\X)
            Area_Area()\Height + (Area_Area()\Y-MouseY)
            Area_Area()\Y = MouseY
            
          Case 2 ;Right-Bottom
            Area_Area()\Width = (MouseX-Area_Area()\X)
            Area_Area()\Height = (MouseY-Area_Area()\Y)
            
          Case 3 ;Left-Bottom
            Area_Area()\Width + (Area_Area()\X-MouseX)
            Area_Area()\X = MouseX
            Area_Area()\Height = (MouseY-Area_Area()\Y)
            
            
          Case 4 ;Top
            Area_Area()\Height + (Area_Area()\Y-MouseY)
            Area_Area()\Y = MouseY
            
          Case 5 ;Right
            Area_Area()\Width = (MouseX-Area_Area()\X)
            
          Case 6 ;Bottom
            Area_Area()\Height = (MouseY-Area_Area()\Y)
            
          Case 7 ;Left
            Area_Area()\Width + (Area_Area()\X-MouseX)
            Area_Area()\X = MouseX
        EndSelect
        
      EndIf
    Next
  Next
EndProcedure

;-Example:
Procedure TheCallback(ID, X, Y, Width, Height)
  Box(X, Y, Width, Height, RGB(255-ID*10, 0, 0))
EndProcedure

OpenWindow(0, 0, 0, 640, 480, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Test")

ID = CreateArea(100, 100, 320, 200)

CreateImage(0, 640, 480)

Repeat
  ;Backbuffer:
  ResizeImage(0, WindowWidth(), WindowHeight())
  StartDrawing(ImageOutput())
  Box(0, 0, ImageWidth(), ImageHeight(), RGB(255, 255, 255))
  DrawAreas(WindowID(), @TheCallback())
  StopDrawing()
  
  ;Flip it:
  StartDrawing(WindowOutput())
  DrawImage(ImageID(), 0, 0)
  StopDrawing()
  Event = WindowEvent()
  Delay(30)
Until Event = #PB_Event_CloseWindow
End
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Antworten