StringGadget [Text Eingabe]

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
squee
Beiträge: 25
Registriert: 21.07.2007 11:07

StringGadget [Text Eingabe]

Beitrag von squee »

Hallo Leute,

ich wollte ein Textfeld erstellen in dem ich [z.B.: eine html Seite] schreiben kann. Ich habe in der Hilfe von PureBasic v4.00 (Windows - x86) (Demo) folgendes gefunden:

Code: Alles auswählen

     StringGadget(#PB_Any, 34, 0, 560, 500, "Text...")
Ich kann aber nur in eine Zeile schreiben und keine Umbrüche machen.
Ich glaube mir Fehlt da ein bisschen das Hintergrundwissen über den StringGadget.

Könnt ihr mir da ein bisschen helfen?




Ps.: Der ganze Code

Code: Alles auswählen

If OpenWindow(0,200,200,800,600,"jackyedit",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
EndIf


If PanelGadget  (0, 0, 30, 600, 570)
      AddGadgetItem (0, 0, "Neu")
      StringGadget(#PB_Any, 34, 0, 560, 500, "Text...")
      AddGadgetItem (0, 0, "Neu")
      StringGadget(#PB_Any, 34, 0, 560, 500, "Text...")
      CloseGadgetList()
     
EndIf


Repeat
      Event = WaitWindowEvent()
      Select Event
      Case #PB_Event_CloseWindow
      beenden_abfrage = MessageRequester("jackyedit","Programm beenden?",#PB_MessageRequester_YesNo)
      If beenden_abfrage = 6
      End 
      If EventID = #PB_Event_CloseWindow 
      Quit = 4
      EndIf
      EndIf
      EndSelect
ForEver
--------------------------------------------------------------------------------------------------------------

www.squee-design.de
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 »

Versuch es mal mit dem EditorGadget :wink:
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
squee
Beiträge: 25
Registriert: 21.07.2007 11:07

Beitrag von squee »

Danke mal. <)

Naja der Editor Gadget ist in der Hilfe etwas notdürftig beschrieben... :?

Ich habs jetzt mal so ausprobiert aber da wird dann nur ein leeres Fenster angezeigt... :shock:

Code: Alles auswählen

If PanelGadget  (0, 0, 30, 600, 570) 
      AddGadgetItem (0, 0, "Neu") 
      EditorGadget(0, 8, 8, 306, 133) 
      AddGadgetItem (0, 0, "Neu") 
      EditorGadget(0, 8, 8, 306, 133) 
      CloseGadgetList() 
      
EndIf 
--------------------------------------------------------------------------------------------------------------

www.squee-design.de
Benutzeravatar
D@nte
Beiträge: 324
Registriert: 24.04.2007 15:33
Wohnort: Berlin

Beitrag von D@nte »

Du solltest dich erstmal entscheiden was nun die ID 0 haben soll, das Panel- oder eins der Editor-Gadgets, so wie du es jetzt hast ist's klar das nix angezeigt wird da alle 3 Gadgets die ID 0 haben...

Außerdem sollteste dir ganz schnell Enumerations und ne anständige Quelltextformatierung angewöhnen, die vereinfachen das lesen und korrigieren des Quellcodes ungemein.

Und keine Ahnung was jetzt allgemein besser ist Repeat ... ForEver oder Repeat .. Until aber dazu werden bestimmt wieder Kiffi, Kaeru oder ts ihren Senf abgeben :mrgreen:

Hier aufjedenfall mal der korrigierte und formatierte Quelltext damit du siehst wovon ich rede...

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration

Enumeration
  #Panel_0
  #Editor_0
  #Editor_1
EndEnumeration

If OpenWindow(#Window_0, #PB_Ignore, #PB_Ignore, 800, 600, "jackyedit", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(#Window_0))
EndIf

If PanelGadget(#Panel_0, 0, 30, 600, 570)
  AddGadgetItem(#Panel_0, 0, "Panel 1")
    EditorGadget(#Editor_0, 8, 8, 560, 500)
    AddGadgetItem(#Editor_0, -1, "Panel 1 Text...")
  AddGadgetItem(#Panel_0, 0, "Panel 2")
    EditorGadget(#Editor_1, 8, 8, 560, 500)
    AddGadgetItem(#Editor_1, -1, "Panel 2 Text...")
  CloseGadgetList()
EndIf

Repeat

  Event = WaitWindowEvent()

  Select Event

    Case #PB_Event_CloseWindow
      beenden_abfrage = MessageRequester("jackyedit", "Programm beenden?", #PB_MessageRequester_YesNo)
      If beenden_abfrage = #PB_MessageRequester_Yes
        End
;      If EventID = #PB_Event_CloseWindow ;<= was'n
;        Quit = 4                         ;<= das
;      EndIf                              ;<= hier?!
      EndIf
  EndSelect

ForEver
Achja, was sollte eigentlich das mit den "; <=" werden was ich da auskommentiert hab?!
Benutzeravatar
squee
Beiträge: 25
Registriert: 21.07.2007 11:07

Beitrag von squee »

Ok, danke.

Ich glaub ich verstehs <)

Und wegen meinem Quelltextformatierung.

Bin Mediengestalter...
Ich mag keinen Flattersatz :mrgreen:

Aber ich werds mir angewöhnen schöner zu schreiben^^

Und des...

Code: Alles auswählen

;      If EventID = #PB_Event_CloseWindow ;<= was'n 
;        Quit = 4                         ;<= das 
;      EndIf                              ;<= hier?! 
...stand in so einen Anfänger Tutorial drinnen.
--------------------------------------------------------------------------------------------------------------

www.squee-design.de
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Bin Mediengestalter...
> Ich mag keinen Flattersatz :mrgreen:

tja sorry, beim programmieren ist das was anderes.

du wirst schon bald feststellen, das logisches einrücken auch für dich selber die übersichtlichkeit erhöht.
man erkennt praktisch sofort an der spalte in der ein commande beginnt seinen "nesting-level",
also, wie tief es in irgendwelche logischen schritte eingebunden ist.


> ..stand in so einen Anfänger Tutorial drinnen.

aber dann stand da doch garantiert auch am ende der schleife

Code: Alles auswählen

Until Quit <> 0
und danach wurde vielleicht noch der Wert von Quit ausgewertet,
um unterschiedlich zu reagieren, je nachdem auf welche weise der user beendet hat.

und in deinem ersten code:
einmal machst du: Select EventID / Case #PB_Event_CloseWindow,
und danach wieder: If EventID = #PB_Event_CloseWindow
dass das doppelt gemoppelt ist, sollte doch klar sein... ;)


> Und keine Ahnung was jetzt allgemein besser ist Repeat ... ForEver oder Repeat .. Until aber dazu werden bestimmt wieder Kiffi, Kaeru oder ts ihren Senf abgeben

ich persönlich bevorzuge Until, weil ich Break nur in spezialfällen nutze wo es unumgänglich ist.
außerdem sehe ich gerne die end-bedingung sauber am ende der schleife, anstatt sie im code irgendwo suchen zu müssen.

aber es gibt andere, die schwören auf reichliche verwendung von Break, ist auch ne art geschmackssache.
ich finds ähnlich unstrukturiert wie Goto.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
squee
Beiträge: 25
Registriert: 21.07.2007 11:07

Beitrag von squee »

Jetzt kommt noch einmal ne Frage die oben anknüpft. :|

Ich will nicht nach der Lösung fragen [habe aber nicht gegen nützliche Tipps :wink: ].

Bin ja noch blutiger Anfänger drumm wollte ich liber mal nachfragen ob das so "einfach " möglich ist oder ob ich das lieber noch nicht versuchen soll.



ALso ich habe ein Fenster mit einer toolbar [neu, speichern und öffnen] sowie unten ein PanelGadget und ein EditorGadget.

Wenn ich auf neu klicke soll ein neues panel mit einem editorgadget kommen,
wenn ich öffnen soll die datei geöffnet werden und in einem neuem Panel erscheinen
und speichern erklärt sich ja von selbts.

[die Dateien sollen nur einfache *.txt sein]

Ist das für einen Anfänger noch zu hoch? <)
--------------------------------------------------------------------------------------------------------------

www.squee-design.de
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 »

>> Ist das für einen Anfänger noch zu hoch? <)
Ja :mrgreen:
Beschränke das ganze auf sagen wir mal 20 Tabs die Du in einem Array
verwaltest, dann könnte es dennoch klappen :wink:
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
squee
Beiträge: 25
Registriert: 21.07.2007 11:07

Beitrag von squee »

20 Tabs? so viel brauch ich ja nie :freak:

Ne im Erst. Dann versuchs ich mal so.

Danke :mrgreen:
--------------------------------------------------------------------------------------------------------------

www.squee-design.de
Antworten