Abfrage des Mausklicks

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

@KaeruGamen
Das mit dem:
>>aber noch mal grundsätzlich: Screens sind für Spiele-geschichten.
hast'e gut getroffen.

Hätte Fred meinen Wunsch (siehe vorherigen Link) erfüllt, wären heute vielleicht einige Grafikfunktionen für Vectorgrafik in PB hinzugekommen.


Grüße Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag von Brügge »

also mit 3.90 demo würde ich das so machen:



Code: Alles auswählen

InitSprite()
InitKeyboard()
InitMouse()

OpenScreen(1280,1024,32, "CAD")
StartSpecialFX() 

Dim maushintergrund(9,9)


Repeat
ExamineKeyboard() 
ExamineMouse() 

If KeyboardPushed(#PB_Key_Escape)
  esc = 1
EndIf

StartDrawing(ScreenOutput())
  For i = 0 To 9
    For j = 0 To 9
      maushintergrund(i,j) = Point(MouseX()+i,MouseY()+j)
    Next j
  Next i

  FrontColor(255,255,255)
  Box (MouseX()+1,MouseY()+1,8,8)
  FrontColor(255,0,0)
  Line(MouseX(),MouseY(),9,0)
  Line(MouseX(),MouseY(),0,9)
StopDrawing()

FlipBuffers()

zeichnen = 0

If MouseButton(1)
  If druck1 = 0
    x1 = MouseX()
    y1 = MouseY()
  EndIf
  druck1 = 1
Else
  If druck1 = 1 
    x2 = MouseX()
    y2 = MouseY()
    zeichnen = 1
  EndIf
  druck1 = 0
EndIf


StartDrawing(ScreenOutput())
   FrontColor (0,255,0)
   If zeichnen = 1
     LineXY(x1,y1,x2,y2)
   EndIf
StopDrawing()

zeichnen = 0
FlipBuffers()

StartDrawing(ScreenOutput())
  For i = 0 To 9
    For j = 0 To 9
      Plot (MouseX()+i,MouseY()+j,maushintergrund(i,j))
    Next j
  Next i   
StopDrawing()


Until esc = 1
naja also wenn das so soll dann helf ich dir auch wohl beim rest



mfg T.Brügge
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> (siehe vorherigen Link)

die anfrage war ja schon von 2003...

gibt aber doch nen API-call um den linientyp zu beeinflussen...

hatte erst vor ner Weile was in der Lounge gesehen...



> Grafikfunktionen für Vectorgrafik

polardarstellung umrechnen könnte man vielleicht mit nem macro machen,
und nunja, kreuzprodukt, matritzen..
müsst man halt mal schaun, wieviel rechenarbeit da überall drinne steckt,
könnte man aber bestimmt relativ performante minilösungen erarbeiten...

grundsätzlich hat sich da bestimmt auch remi schon mal gedanken gemacht,
sowas ist ja durchaus sein metier...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
GreyEnt
Beiträge: 376
Registriert: 20.07.2006 19:41

danke kaeru gaman

Beitrag von GreyEnt »

werde ich mal versuchen.
Benutzeravatar
GreyEnt
Beiträge: 376
Registriert: 20.07.2006 19:41

WoW Brügge.

Beitrag von GreyEnt »

Wie kann man nur so schnell sein?
Ich fange wieder an Briefmarken zu sammeln. :(
Für sowas hätte ich Tage/ Wochen gebraucht.

Das Problem. Ich brauche ein Fenster für Gadgets/Statusbar/Menus.

deswegen ist diese Screen geschichte für mein dafürhalten undurchfürbar.

MfG
Dieter
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

wär auf jeden fall viel schwieriger... soweit ich gehört hab, ist das garnicht einfach, screen und gadgets aufm selben fenster zu haben, besonders beim resizen gibts scherereien...
habs halt selber noch nicht ausprobiert, den windowed screen benutz ich nur als ersatz fürn fullscreen, dann nimmt das game halt das ganze fenster ein statt des ganzen bildschirms...


also.. womit du mal rumprobieren könntest...

du kannst ein image createn und auf nem imagegadget darstellen,
am besten ganz links oben in der ecke des fensters, dann hast du vorerst nix groß mit koordinaten umzurechnen.

bei nem mausclick ermittelst du die koordinaten WindowMouseX/Y-koordinaten,
und wenn die im bereich des imagegadgets sind, kannst du auf das image direkt zeichnen.
Startdrawing(ImageOutput(....

bei dem GetAsyncKeyState_(#vk_lbutton) bin ich mir jetzt nicht ganz sicher, ob man vorher noch was abfragen muss... find grad meinen code nich, wo ich das letztma benutzt hatte...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
GreyEnt
Beiträge: 376
Registriert: 20.07.2006 19:41

frage nebenbei

Beitrag von GreyEnt »

diese geschichte GetAsyncKeyState_(#vk_lbutton)

hab ich noch nie in der Doku gefunden.
gibt es von diesen dingern die nicht in der Doku stehen noch mehr?
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

klar, jede menge. Fred is so ein hunds gemeiner Typ und programmiert
tausende und noch mehr Funktionen und dokumentiert diese nicht in der
Hilfe, weist du?

http://www.purebasic.fr/german/viewtopic.php?t=14 :roll:
Bild
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Ich habe jetzt ohne diesen Screen.... mal was zusammen gesetzt.
Ist aber noch nicht richtig wie es soll.
Es soll auch nur als angefangenes Beispiel angesehen werden.
Im Moment bin ich auch wegen der Hitze zu Faul :lol:

Code: Alles auswählen

;Procedure from einander , english forums!
Procedure Lin(x,y,x1,y1,Width,Color) 
   hDC=GetDC_(WindowID()) 
   pen=CreatePen_(#PS_SOLID,Width,color)  
   hPenOld=SelectObject_(hDC,pen) 
   MoveToEx_(hDC,x,y,0):LineTo_(hDC,x1,y1) 
   DeleteObject_(pen) 
   DeleteObject_(hPenOld) 
EndProcedure 

;InitMouse()
_X=GetSystemMetrics_(#SM_CXSCREEN)-8 : _Y=GetSystemMetrics_(#SM_CYSCREEN)-68 
OpenWindow(0,0,0,_X,_Y,#WS_OVERLAPPEDWINDOW ,"") 

Repeat 

event = WaitWindowEvent()
Select event
   Case #WM_LBUTTONDOWN 
               x1 = WindowMouseX() 
               y1 = WindowMouseY()
   Case #WM_LBUTTONUP
               x2 = WindowMouseX() 
               y2 = WindowMouseY() 
               lin(x1,y1,x2,y2,2,#Red) 
EndSelect 
Until event = #PB_Event_CloseWindow  
[Edit] hab den Source noch etwas umgestellt.
Linke Maustaste irgendwo im Windows klicken und festhalten,
dann woanders loslassen. Jetzt müsste man nur noch die Linie
zwischendurch anzeigen z.B. durch XOR (quasi Gummibandfunktion).
Dieser Source arbeitet nur mit den #WM - Konstanten :mrgreen:
[/Edit]

Grüße Falko
Zuletzt geändert von Falko am 21.07.2006 00:56, insgesamt 6-mal geändert.
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
GreyEnt
Beiträge: 376
Registriert: 20.07.2006 19:41

auch nicht schlecht.

Beitrag von GreyEnt »

so stell ich mir das vor.
wie Du oder Brügge linien zeichnen.
Wieviel seiten an Code darf man hier den rein Kopieren?
Dann könnte ich ja mal vorstellen was ich so gemacht habe.
und nun nicht wirklich weiterkomme.
Antworten