StringGadget VS #PB_String_Numeric

Fragen und Bugreports zur PureBasic 4.0-Beta.
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 »

hallodri hat geschrieben:
das mag ja richtig sein, FALSCH ist jedoch, die anderen Zahlentypen von vornherein einfach
unter den Tisch zu kehren und dies nicht einmal zu kommentieren.
Wozu auch , WinApi heisst nicht "Flag setzen und gut ist". 'Nen
bisschen programmieren muss man ueberall.
So zu sehen ist PB hier nach einer reinen API-Funktion gegangen. Dann hätte man das vielleicht auch weglassen können, da man es mittels der API
auch progen kann :lol: :lol:

Ich finde numerisch hin oder her (Ganzzahl). Es gibt auch negative Ganzzahlen und da wäre zumindestens ein "-" sinnvoll.
Ob die Zahlen was bezeichnen oder anderes machen sei dahingestellt.
Will man ein Edit in einer Stringbox machen muss man den String
erst nach allem durchsuchen, was nix mit Zahlen oder Vorzeichen zu tun
hat, entfernen und dann z.B. in eine Fließkommazahl umwandeln.
Es gab früher mal den Spruch:"Man muß das RAD nicht zweimal erfinden".
Aber beim StringGadget() ist das wohl nicht erforderlich.

Vielleicht wäre es ja möglich für PB-Befehle wie StringGadget
eine Ausnahme zu machen und für numeric ", . - " zuzulassen.
Irgendwann kommt garantiert diese Frage wieder.

MfG Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Beitrag von H.Brill »

Man kann aber auch die Freeware NEdit.dll von
www.fabbing.de nehmen. Da kann man sogar einstellen,
wie man es will :

zweiter Parameter :
1 = nur EIN Komma/Punkt
2 = nur 2 Ziffern hinter dem Komma/Punkt
4 = Minus nur einmal und am Anfang zulassen.

Ich bekomme noch einen Fehler beim Beenden gemeldet.
Wie kann ich das Stringgadget alleine zerstören ?

Code: Alles auswählen

#mydll = 1
#mygadget = 2
OpenLibrary(#mydll, "NEdit.dll")

Procedure InitEdit(gadget.l, message.l)
  CallFunction(#mydll, "InitMessages", gadget, message)
EndProcedure

If IsLibrary(#mydll)  
   win.l = OpenWindow(#PB_Any, 0, 0, 300, 300,"Numeric", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
   If CreateGadgetList(WindowID(win)) 
      StringGadget(#mygadget, 10, 20, 100, 20, "") 
      myedit.l = GadgetID(#mygadget)
      InitEdit(myedit, 1)
   EndIf
   While WaitWindowEvent() <> #PB_Event_CloseWindow: Wend 
   CloseLibrary(#mydll)
   ;DestroyWindow_(myedit)
EndIf   
End 
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 »

Falko hat geschrieben: So zu sehen ist PB hier nach einer reinen API-Funktion gegangen. Dann hätte man das vielleicht auch weglassen können, da man es mittels der API
auch progen kann :lol: :lol:
Dann ist wohl fast alles überflüssig in PB :mrgreen:
Falko hat geschrieben: Ich finde numerisch hin oder her (Ganzzahl). Es gibt auch negative Ganzzahlen und da wäre zumindestens ein "-" sinnvoll.
Ob die Zahlen was bezeichnen oder anderes machen sei dahingestellt.
Will man ein Edit in einer Stringbox machen muss man den String
erst nach allem durchsuchen, was nix mit Zahlen oder Vorzeichen zu tun
hat, entfernen und dann z.B. in eine Fließkommazahl umwandeln.
Es gab früher mal den Spruch:"Man muß das RAD nicht zweimal erfinden".
Aber beim StringGadget() ist das wohl nicht erforderlich.

Vielleicht wäre es ja möglich für PB-Befehle wie StringGadget
eine Ausnahme zu machen und für numeric ", . - " zuzulassen.
Irgendwann kommt garantiert diese Frage wieder.

MfG Falko

Möglich wäre es, aber nicht sinnvoll. Wenn es sinnvoll wäre, hätte Billy es
implementiert. Wer also sowas braucht, muß es sich proggen, für sowas
ausgefallenes kann es keine fertigen Befehle geben.

Es gibt vieles, was man implementieren könnte, aber man wird es nicht
schaffen, dies in irgendeiner Programmiersprache umzusetzen, selbst wenn,
würde das erlernen der Sprache ein vielfaches dauern, die Hilfe wäre ja
auich entsprechend größer. Von Ersparnis bleibt da wohl nichts übrig.
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
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

ts-soft hat geschrieben:@hallodri
Und wie schaltet man jetzt den Ballontip, welcher bei aktivierem XP-Style
kommt, ab :mrgreen:

Ansonsten funktioniert es ja!

Mist , das Ding hab ich ja noch nie gesehen *G*

Das sollte helfen.

Code: Alles auswählen

    #ECM_FIRST          = $1500  
    #EM_SHOWBALLOONTIP  = #ECM_FIRST + $3
    
    if #EM_SHOWBALLOONTIP = msg
      ProcedureReturn 1
    endif 
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

H.Brill hat geschrieben: Ich bekomme noch einen Fehler beim Beenden gemeldet.
Wie kann ich das Stringgadget alleine zerstören ?
Die Funktion klemmt sich vor dem eigentlichen Callback.
Beim Beenden ist der aus der DLL nicht mehr gueltig und
schmiert ab, da PB noch aufraeumen moechte (oder was
auch immer). Wenn du den Zeiger vorher speicherst und
am Ende zurueck schreibst, beendet es sich ganz normal
und PB kann auch den Speicher z.b. von SetProp wieder
freigeben.

Code: Alles auswählen

#mydll = 1
#mygadget = 2
OpenLibrary(#mydll, "NEdit.dll")

Procedure InitEdit(gadget.l, message.l)
  CallFunction(#mydll, "InitMessages", gadget, message)
EndProcedure

If IsLibrary(#mydll) 
   win.l = OpenWindow(#PB_Any, 0, 0, 300, 300,"Numeric", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   If CreateGadgetList(WindowID(win))
      StringGadget(#mygadget, 10, 20, 100, 20, "") 
      myedit.l = GadgetID(#mygadget)
      old = GetWindowLong_(myedit,#GWL_WNDPROC)
      InitEdit(myedit, 0)
      
   EndIf
   While WaitWindowEvent() <> #PB_Event_CloseWindow: Wend
   
   SetWindowLong_(myedit,#GWL_WNDPROC,old)
EndIf   
End
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Beitrag von H.Brill »

Danke für den Hinweis.
Funktioniert jetzt.

PS: Hat jemand Erfahrung mit DLL2LIB von Binary Soft?
Ist ein Programm, mit dem man DLLs zu STATIC LIBs
konvertieren kann. Ich habe aus der DLL eine LIB gemacht
und versucht mit :

Import "NEdit.lib"
InitMessages(gadget.l, flag.l)
EndImport

die LIB zu importieren. Scheint aber irgendwie Konflikte
mit der Namensauflösung zu geben (unresolved external symbol).
In welchen Ordner muß denn die LIB (PureLibraries\Userlibraries oder
dort, wo der Sourcecode liegt) ?
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag von Konne »

Möglich wäre es, aber nicht sinnvoll. Wenn es sinnvoll wäre, hätte Billy es
implementiert. Wer also sowas braucht, muß es sich proggen, für sowas
ausgefallenes kann es keine fertigen Befehle geben.
Ich finde den Befehl gar nicht ausgefalen und ich habe mich schon oft darueber geaergert aber ich denke da hatte einfach jemand keinen bock das zu schreiben, warscheinlich ist #Numeric nur ein api Flag und das anzuhaengen ist halt doch leichter wie eine kleine abweichung selber zu proggen.

Nunja man kann ja ein Buttongadget vor das stringgadget machen dass immer von + zu - stringt und dann ein textgadget mit "." und dann noch ein Stringgadget fuer die nachkomma stellen und ass dann alles in ne Procedure und dann sieht es doch doof aus nunja war ja auch nur ein vorschlag.
Benutzeravatar
sharkpeter
Beiträge: 474
Registriert: 29.08.2004 16:18
Wohnort: Dresden
Kontaktdaten:

Beitrag von sharkpeter »

@hallodri,

der Code von dir ist nicht schlecht :allright:

Ich lasse persönlich nur die Finger von CallBack´s. Mein nächstes Handycap
ist noch die Abwesendheit während der Woche, so daß ich keinerlei Zugriff
auf irgend eine Unterstützung habe. Nicht das du denkst, das ich mir
darüber noch keine Gedanken gemacht habe. Habe ich sehr wohl, nur ist
der Code ein wenig umständlicher. Der ist auch auf meiner HP veröffentlicht.

@H.Brill,

Das mit der Lib ist auch ein Ansatz.

@Konne,

da bin ich wenigstens nicht alleine mit meiner Ansicht :)

@Allen die geantwortet haben:

danke für die Tipps, offensichtlich hatten ja wohl doch noch mehr dieses Bedürfnis.

@Mod´s,

wie Falko weiter oben bemerkt, ist es nicht auszuschließen, dass die Frage
wieder gestellt wird. Daher wäre es vielleicht sinnvoll, das gesamte Thema
in einen anderen Ordner zu verschieben, bevor alles was zum Themenbereich
PB_4.00_Beta gehört wieder entfernt wird.

Danke schon mal im voraus, zumal hier recht interessante Lösungen
vorhanden sind.

Gruß Jens
PB3.94 bis 6.xx / (Win98/98SE/ME/XPProSP3/WINVista-X32)/WIN7HP-X64/WIN8PRO-X32/WIN10-64

Nichts wissen macht nichts, sich dumm stellen aber schon.
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Re: StringGadget VS #PB_String_Numeric

Beitrag von Andre »

sharkpeter hat geschrieben:@André

wenn du die Hilfe vielleicht daraufhin anpassen könntest? Es sollte schon da stehen
das es nur Ganzzahlen sind und keine Fließkommazahlen.
Done. :)
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Konne hat geschrieben: Ich finde den Befehl gar nicht ausgefalen und ich habe mich schon oft darueber geaergert aber ich denke da hatte einfach jemand keinen bock das zu schreiben
Hört sich so an, als würdest du von dir reden ;)
Naja, mal im Ernst: Klar ist es ärgerlich, dass so etwas nicht im Sprachkern implementiert wurde, aber das gilt letztendlich für viele tausende Funktionalitäten die noch nicht implementiert wurden, alleine uns würden da sicherlich auf Anhieb einige Anfallen. Das PB-Team ist aber leider nicht groß genug um alle diesen "speziellen" Dinge angehen zu können, jedenfalls nicht alle auf einmal.
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Gesperrt