Editor-Gadget, wie Markierung in Stringvariable übernehmen?

Anfängerfragen zum Programmieren mit PureBasic.
JayCool
Beiträge: 54
Registriert: 02.08.2007 20:03

Editor-Gadget, wie Markierung in Stringvariable übernehmen?

Beitrag von JayCool »

Hi @ all,

der Titel sagt ja eigentlich schon alles aus: ICh möchte den Bereich Editor-Gadget in einen String übernehmen, sobald ein Button-Gadget betätigt wird. Wie geht das? Hab' vergeblich in allen möglichen Quellen gescuht, aber leider nix in der Richtung gefunden.

Kann mir außerdem jemand 'n GUTES Tutorial für API-Programmierung nennen. Ich finde immer wieder in unterschiedlichsten Programmen so sachen wie

SendMessage_(GadgetID(gadget),#EM_REPLACESEL,0,Text$).

s gibt aber in PureBaisc keinen Befehl der SendMessage heißt. Wo ist der eigentlich dokumentiert? Was bedeuten die einzelnen Parameter?
Welche Befehle, die mit einem Unterstrich enden, gibt es eigentlich noch? Was machen die im Einzelnen? Welche Parameter muss ich reingeben, damit etwas Sinnvolles rauskommt?

Dann wird da eine Variable #EM_REPLACESEL genannt. Die finde ich zufällig im PureBasic Strukturverzeichnis unter 'Konstanten'.
Gibt's da eigentlich ein Verzeichnis, wo man nachschlagen kann, mit welcher Konstante was abgefragt wird, z.B. so:
Ich hab' einen Joystick mit 18 Knöpfen drauf. Welche Konstante dient dazu, den Gedrückt-Status des 7. Knopfes abzufragen?

Bin momentan etwas gefrustet. Ich kapiere jetzt allmählich so die Standardfunktionen von PureBasic, aber man will ja - bildlich gesprochen - nicht nur auf der Autobahn fahren, sondern hier und da mal einen kleinen Abstecher auf Nebenstraßen machen.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

dann musst du auch auf den nebenstraßen suchen

die Windoof-Apireferent finzte hier

Für die JoystickKnopfgeschichte reicht es vielleicht wenn du mal das
mitgelieferte JoyStickExample anguckst. dort werden zwar nur Knopf 1 und
2 zurückgegeben, aber das wäre ja nun relativ leicht erweiterbar
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
JayCool
Beiträge: 54
Registriert: 02.08.2007 20:03

Beitrag von JayCool »

bobobo hat geschrieben:dann musst du auch auf den nebenstraßen suchen

die Windoof-Apireferent finzte hier

Für die JoystickKnopfgeschichte reicht es vielleicht wenn du mal das
mitgelieferte JoyStickExample anguckst. dort werden zwar nur Knopf 1 und
2 zurückgegeben, aber das wäre ja nun relativ leicht erweiterbar
Erstmal vielen Dank!

Das mit dem Joystick sollte mehr sinngemäß allgemein verstanden werden sollen.
Die Windoof-Apireferentz blickichnichdurch. da steht was von C++ . ich kenn aber kein C++. Ich bin Anfänger auf dem Gebiet, da nützt es mir wenig, wenn ich weiß "What's New in Visual C++ 2008".
Wenn ich Autofahren lernen will, dann nützt es mir auch wenig, wenn ich weiß, was der Toyota Kamasutra (Baujahr 2008) gegenüber dem Toyota Kamasutra (Baujahr 2006) für bahnbrechende Neuigkeiten hat. Da will ich erstmal wissen:
1. Wie starten?
2. Wo Kupplung/Bremse/Gas?
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Es gibt noch andere kleinere API-Referenzen. Genaueres dazu findest du
auch in der FAQ.

Ansonsten kannst du eigentlich alles, was du nicht mit PureBasic-Befehlen
machen kannst, unter Windows mit der API machen.

Allerdings musst du dich darauf einstellen, dass die meisten Beispiele mit API
in C++ geschrieben sind. Und so schwer ist das auch nicht zu lesen. Falls
doch, kannst du sowas im API- oder "Andere Sprachen"-Forum posten.

Außerdem wird dir bestimmt auch die PureArea mit dem CodeArchiv helfen,
die du rechts oben in der Ecke finden kannst.
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Beitrag von hjbremer »

Code: Alles auswählen

;ermittle markierten Bereich
SendMessage_(id_editnr), #EM_EXGETSEL, 0, @markiert.CHARRANGE) 

;String muß die richtige Größe haben
txt$ = Space(1 + markiert\cpMax - markiert\cpMin) 

;hole markierte Zeichen und schiebe diese nach txt$
SendMessage_(id_editnr), #EM_GETSELTEXT, 0, @txt$) 
          
Debug txt$

;editnr ist die Nr.die beim Anlegen des Gadgets vergeben wurde
;#editnr = 1 oder was auch immer du für eine Zahl vergeben hast

;id_editnr=EditorGadget(#editnr, sp, ze, br, hh)
;id_editnr ist die ID für Api Befehle

;solltest du allerdings #PB_Any  benutzt haben, dann gilt folgende Schreibweise
;editnr=EditorGadget(#PB_Any, sp, ze, br, hh)
;id_editnr=GadgetID(editnr)

;oder folgende Schreibweise
;SendMessage_(GadgetID(editnr), #EM_GETSELTEXT, 0, @txt$)

ansonsten befolge den Rat von NicTheQuick und schau mal ins Archiv bzw. PureArea.net dort besonders die Tutorials
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
JayCool
Beiträge: 54
Registriert: 02.08.2007 20:03

Editor-Gadget, Markierung in String übernehmen? [gelöst]

Beitrag von JayCool »

Hi @ all,

vielen Dank erstmal, insbesondere an hjbremer!

Ich hab' mal ein Beispiel gebaut, das vielleicht auch für andere, die sich gerade in die Materie einarbeiten wollen, interessant sein könnte:

Code: Alles auswählen

OpenWindow(0,100,100,800,600,"Selektierten Bereich des Editor-Gadgets in String übernehmen",#PB_Window_SystemMenu)

CreateGadgetList(WindowID(0))
  EditorGadget(0,50,50,700,300)
  TextGadget(1,50,400,700,20,"<markierter Text>",#PB_Text_Border)
  ButtonGadget(2,50,470,150,20,"Markierung übernehmen")

Repeat
  event = WaitWindowEvent()
  
  gnr = EventGadget()
  
  If gnr = 2
    
    SendMessage_((0), #EM_EXGETSEL, 0, @markiert.CHARRANGE)
    txt$ = Space(1 + markiert\cpMax - markiert\cpMin)
    SendMessage_(GadgetID(0), #EM_GETSELTEXT, 0, @txt$)
    
    SetGadgetText(1,txt$)
  
  EndIf
  
Until event = #PB_Event_CloseWindow
Gruß, Jan
Antworten