Noch-Dummi braucht Hilfe

Anfängerfragen zum Programmieren mit PureBasic.
Null
Beiträge: 6
Registriert: 28.07.2009 11:24
Computerausstattung: Windows XP
PB 4.31 Demo (noch)
Wohnort: Ba-Wü

Noch-Dummi braucht Hilfe

Beitrag von Null »

Für meine Minifirma gibt es kein vernünftiges Verwaltungsprogramm. Drum hab ich mich naiverweise entschlossen, selbst Eins zu stricken. Meine bisherige Programmiersprache (Profan) läuft nicht mehr und beim Googeln nach einer Neuen bin ich über Purebasic gestolpert und bin total begeistert! (noch.....)
Meine ersten Gehversuche mit der Demoversion 4.3? sind sehr vielversprechend. Ich wollt schon die Vollversion bestellen, habe aber Bedenken, weil es hier fast ausschließlich um Spiele geht.

Zu meinen Fragen:
1. Kann mann in Purbasic umfangreiche, ernsthafte Programme schreiben, mit denen man eine kleine Firma verwalten kann, oder ist diese Sprache eher für Spiele gedacht?
Falls nein : Welche Programmiersprache wäre sinnvoller

2. Welche Datenbank kommt für das Speichern von mehr als 10000 Sätzen in Frage?

3. Gibt es hier jemanden, der mich hierbei unterstützen könnte?


btw....

Beim Erstellen eines Panelgagets wurde dies nicht angezeigt:

Funzt nicht :
Panelgadget(100,0,0,480,300)
addgadgetitem(100,-1,"Allgemein")

Funzt, gibt aber eine Fehlermeldung aus "Panel nicht erstellt" :

If Panelgadget(100,0,0,480,300)
addgadgetitem(100,-1,"Allgemein")
ElseIf Messagerequester("Fehler","Panel nicht erstellt")
EndIf

übrigens: mit ElseIf a=0 funktionierts auch - nur ohne Fehlermeldung

Im Voraus besten Dank für das Nicht-zerrissen-werden....
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Re: Noch-Dummi braucht Hilfe

Beitrag von cxAlex »

>>Ich wollt schon die Vollversion bestellen, habe aber Bedenken, weil es hier fast ausschließlich um Spiele geht.

Häh?

Du verwechselst da was mit BlitzBasic.

>1. Kann mann in Purbasic umfangreiche, ernsthafte Programme schreiben, mit denen man eine kleine Firma verwalten kann, oder ist diese Sprache eher für Spiele gedacht?

Natürlich

>2. Welche Datenbank kommt für das Speichern von mehr als 10000 Sätzen in Frage?

Pb unterstütz ODCB - Datenbanken und hat SQLite nativ integriert, sollte locker reichen
Null hat geschrieben:Beim Erstellen eines Panelgagets wurde dies nicht angezeigt:

Funzt nicht :
Panelgadget(100,0,0,480,300)
addgadgetitem(100,-1,"Allgemein")

Funzt, gibt aber eine Fehlermeldung aus "Panel nicht erstellt" :

If Panelgadget(100,0,0,480,300)
addgadgetitem(100,-1,"Allgemein")
ElseIf Messagerequester("Fehler","Panel nicht erstellt")
EndIf

übrigens: mit ElseIf a=0 funktionierts auch - nur ohne Fehlermeldung
Ich denke du hast den Sinn oder die Funktion von ElseIf noch nicht verstanden, ließ mal in der Hilfe nach. Das weiteren kann ich jetzt nur mal vermuten das du kein Fenster erstellt hast auf dem du das Panel anzeigen willst.

Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Beitrag von TomS »

1. Ja kann man. Ich denke PB wird überwiegend für Programme und Tools verwendet. Zumindest von den meisten.

2. SQL (MySQL, SQLite)

3. Bei Fragen einfach im Forum fragen (Code Tags verwenden)
Null
Beiträge: 6
Registriert: 28.07.2009 11:24
Computerausstattung: Windows XP
PB 4.31 Demo (noch)
Wohnort: Ba-Wü

Mein Programmteil

Beitrag von Null »

Doch. Ein Fenster hab ich erstellt....

Code: Alles auswählen

;Verwaltungsprogramm für Lohnfertiger

SetCurrentDirectory("G:\FIRMA")

OpenWindow(1,0,0,500,300,fnme$+" - Stammdaten",#PB_Window_ScreenCentered)
   PanelGadget(100,10,10,480,200)
      
   If AddGadgetItem(100,-1,"Anschrift")
    ElseIf a=0
    
   EndIf
   
   
  CloseGadgetList()  

Delay(3000)
CloseWindow(1)  

  End

Übrigens hab ich Pb erst letzten Samstag gedownloaded. Hoffe deshalb noch auf "Welpenschutz"
:oops:

Code-Tags ergänzt - nächstes Mal bitte selber dran denken
- Kaeru fecit
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Du schließt das Fenster wieder bevor die Window-Events verarbeitet werden. Da fehlt die Event-Schleife. Sieh dir mal die Beispiele an die im PB - Example Ordner sind:

Code: Alles auswählen

;Verwaltungsprogramm für Lohnfertiger

SetCurrentDirectory("G:\FIRMA")

OpenWindow(1, 0, 0, 500, 300, fnme$ + " - Stammdaten", #PB_Window_ScreenCentered)
PanelGadget(100, 10, 10, 480, 200)

If AddGadgetItem(100, -1, "Anschrift")
ElseIf a = 0
  
EndIf

CloseGadgetList()

Repeat
  
Until WaitWindowEvent() = #PB_Event_CloseWindow

End
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

genau, Events müssen IMMER verarbeitet werden.

und wozu das ElseIf sein soll, versteh ich nicht, hat keinerlei sinnvolle Funktion.

was noch dazu kommt:
* Close-Button auch einbaun
* Nummern von Gadgets und Fenster und anderen Objekten immer bei Null anfangen
* deswegen besser Enumerations verwenden

Code: Alles auswählen

fnme$ = "Damage Inc."

; ** Windows **
Enumeration
  #Window_Main 
EndEnumeration

; ** Gadgets **
Enumeration
  #Panel 
EndEnumeration

OpenWindow( #Window_Main, 0,0, 500,300, fnme$+" - Stammdaten", #PB_Window_ScreenCentered | #PB_Window_SystemMenu )
  PanelGadget( #Panel, 10,10, 480,200)
  AddGadgetItem( #Panel , -1,"Anschrift")

Repeat
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_CloseWindow
      EXIT = 1
  EndSelect
Until EXIT

CloseWindow(#Window_Main)

End
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Null
Beiträge: 6
Registriert: 28.07.2009 11:24
Computerausstattung: Windows XP
PB 4.31 Demo (noch)
Wohnort: Ba-Wü

Das erste Problem ist gelöst

Beitrag von Null »

Jetzt klappts
(ich weiß nur nicht warum)

Code: Alles auswählen

;Verwaltungsprogramm für Lohnfertiger

SetCurrentDirectory("G:\FIRMA")

OpenWindow(1,0,0,700,400,fnme$+" - Stammdaten",#PB_Window_ScreenCentered)
   PanelGadget(100,10,10,680,300)      
   AddGadgetItem(100,-1,"Anschrift")    
   TextGadget(101,10,70,100,20,"Anrede")
   TextGadget(102,10,100,100,20,"Name")
   TextGadget(103,10,130,100,20,"Zusatz")
   TextGadget(104,10,160,100,20,"Zusatz")
   TextGadget(105,10,190,100,20,"Straße/HNr")
   TextGadget(106,10,220,100,20,"PLZ/Ort")
   TextGadget(107,350, 70,100,20,"Telefon")
   TextGadget(108,350,100,100,20,"Telefax")
   TextGadget(109,350,130,100,20,"Mailadresse")
   TextGadget(110,350,160,100,20,"URL")
   ComboBoxGadget(120,120,70,100,20)
    AddGadgetItem(120,-1,"Firma")
    AddGadgetItem(120,-1,"Herr")
    AddGadgetItem(120,-1,"Frau")
   StringGadget(121,120,100,160,20,"")
   StringGadget(122,120,130,160,20,"")
   StringGadget(123,120,160,160,20,"")
   StringGadget(124,120,190,160,20,"")
   StringGadget(125,120,220, 50,20,"")
   StringGadget(126,175,220,100,20,"")
   StringGadget(127,470, 70,160,20,"")
   StringGadget(128,470,100,160,20,"")
   StringGadget(129,470,130,160,20,"")
   StringGadget(130,470,160,160,20,"")  
  CloseGadgetList()
  OpenGadgetList(100)
  AddGadgetItem(100,-1,"Zahlung")
  TextGadget(131,10,70,100,20,"Kreditinstitut")
  TextGadget(132,10,100,100,20,"Bankleitzahl")
  TextGadget(133,10,130,100,20,"Kontonummer")
  TextGadget(134,350, 70,100,20,"Zahlungsziel")
  TextGadget(135,350,100,100,20,"Skontotage")
  TextGadget(136,350,130,100,20,"Skonto")
  TextGadget(137,350,160,100,20,"Kreditlimit")
  StringGadget(138,120, 70,150,20,"")
  StringGadget(139,120,100,150,20,"")
  StringGadget(140,120,130,150,20,"")
  StringGadget(141,470, 70,150,20,"")
  StringGadget(142,470,100,150,20,"")
  StringGadget(143,470,130,150,20,"")
  StringGadget(144,470,160,150,20,"")
  
  CloseGadgetList()
  
  
  
  
  ButtonGadget(999,10,340,100,40,"zurück")
  
  Repeat
    event = WaitWindowEvent()
    auswahl = EventGadget()
    
    Select auswahl
    
      Case 999
        
        ;Gadget-Inhalte auslesen
        ;speichern
        
        auswahl = #PB_Event_CloseWindow
        
    EndSelect    
    
  Until auswahl = #PB_Event_CloseWindow
    
  CloseWindow(1)  

  End
    
Der Tip mit "Enumeration" ist ja genial! Dann muß ich auch nicht mehr beim "Zusammenbau" die Handles überprüfen, ob irgendeines doppelt vergeben wurde. Muß ich gleich ausprobieren! (oder doch erst MySQL/SQLite lernen?)

Vorerst mal herzlichen Dank für die überaus schnelle und freundliche Unterstützung. Bestimmt kommen noch mehr Fragen auf.... Hoffentlich kann ich mich mal revanchieren

Hier übrigens Programmteil 1

Auch noch nicht fertig, der Auswahlteil fehlt noch, aber man kann den beabsichtigten Zweck erkennen.

Code: Alles auswählen

;Verwaltungsprogramm für Lohnfertigung
;
SetCurrentDirectory("G:\FIRMA")

ExamineDesktops()
DW = DesktopWidth(0)
DH = DesktopHeight(0)

OpenWindow(0,0,0,dw,dh,fnme$+" - Verwaltungsprogramm - Hauptfenster")
  TextGadget  (1,10, 10,100,20,"Allgemeines")
  ButtonGadget(2,10, 50,100,40,"Firma")
  ButtonGadget(3,10,100,100,40,"Mitarbeiter")
  ButtonGadget(4,10,150,100,40,"Maschinen")
  ButtonGadget(5,10,200,100,40,"Material")
  ButtonGadget(6,10,250,100,40,"Adressen")
  ButtonGadget(7,10,300,100,40,"")
  
  TextGadget  (10,150, 10,100,20,"Einkauf")
  ButtonGadget(11,150, 50,100,40,"Anfrage")
  ButtonGadget(12,150,100,100,40,"Bestellung")
  ButtonGadget(13,150,150,100,40,"Lieferung")
  ButtonGadget(14,150,200,100,40,"Eing.Rechnung")
  ButtonGadget(15,150,250,100,40,"Zahlung")
  
  TextGadget  (20,290, 10,100,20,"Verkauf")
  ButtonGadget(21,290, 50,100,40,"Angebot")
  ButtonGadget(22,290,100,100,40,"Auftrag")
  ButtonGadget(23,290,150,100,40,"Lieferung")
  ButtonGadget(24,290,200,100,40,"Rechnung")
  ButtonGadget(25,290,250,100,40,"Mahnung")
  ButtonGadget(26,290,300,100,40,"Nachkalkulation")
  
  TextGadget  (30,430, 10,100,20,"Sonstiges")
  ButtonGadget(31,430, 50,100,40,"Offene Posten")
  ButtonGadget(32,430,100,100,40,"Erfolgsrechnung")
  ButtonGadget(33,430,150,100,40,"Lohnabrechnung")
  ButtonGadget(34,430,150,100,40,"Jahresmeldungen")
  
  TextGadget  (40,570, 10,100,20,"Extras")
  ButtonGadget(41,570, 50,100,40,"Taschenrechner")
  ButtonGadget(42,570,100,100,40,"Rechenblatt")
  ButtonGadget(43,570,150,100,40,"Briefe")
  
  
  ButtonGadget(9999,10,400,100,40,"Feierabend")
  
  Repeat
    Button = WaitWindowEvent()
    auswahl = EventGadget()
    
    Select auswahl
    
      Case 9999 ;Programmende
        Messagerequester("Achtung","Programm verlassen -- Alles gespeichert??")
        CloseWindow(0)
        End
        
    EndSelect    
        
  Until auwahl = #PB_Event_CloseWindow      
CloseWindow(0)
End
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

also ich würde dir DRINGEND empfehlen, die Enumeration auch zu benutzen, anstatt solche irrsinnigen Nummern wie 9999 zu verwenden.
damit erstellst du nämlich gleichzeitig eine 10000 Einträge große Handle-Tabelle, die dir den Speicher zukleistert.

und in deiner Event-Schleife... die Variable "auswahl" auf Event_Close zu setzen ist unsinnig,
so wie du das dort machst funktioniert der Close-Button des Fensters nicht.

schau dir mal in meinem Beispiel an, wie ich das mit dem Flag EXIT gelöst habe, das ist besser.
das kannst du sowohl bei Event = #PB_Event_CloseWindow setzen, als auch bei Auswahl = #Button_Zurueck.

[edit]
außerdem musst du erst das Event selber checken, und nur wenn es #PB_Event_Gadget ist,
darfst du checken, welches Gadget das Event empfangen hat.
[/edit]

...

und es scheint fast, als wenn du bei jedem Datensatz das Fenster erneut öffnen willst.
verstecke es lieber nur, den Fenstertitel kannst du anpassen.
das wird auf die Dauer wesentlich schneller, schlanker, angenehmer.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

@NULL,

das verstehe ich nicht???????????
Meine bisherige Programmiersprache (Profan) läuft nicht mehr
Dabei ist erst ein Update herausgekommen.

Wie dem auch sei. Erstmal willkommen im Forum.

Bin auch über Profan zu Purebasic gekommen. Allerdings bin ich nicht der Einzige.
User hier haben schon mit Profan geschafft und sind zu PB gewechselt.

Aber jetzt zu deinem Problem.

Ich würde dir raten als Anfänger von Profan kommend und in dieser Situation steckend, folgendes zu tun:

Ändere diese Zeile folgendermaßen um:

Code: Alles auswählen

OpenWindow(0,0,0,dw,dh,fnme$+" - Verwaltungsprogramm - Hauptfenster") 
in

Code: Alles auswählen

OpenWindow(0,0,0,900,800," - Verwaltungsprogramm - Hauptfenster") 
und lösche diesen Teil heraus:

Code: Alles auswählen

Repeat
    Button = WaitWindowEvent()
    auswahl = EventGadget()
   
    Select auswahl
   
      Case 9999 ;Programmende
        Messagerequester("Achtung","Programm verlassen -- Alles gespeichert??")
        CloseWindow(0)
        End
       
    EndSelect   
       
  Until auwahl = #PB_Event_CloseWindow     
CloseWindow(0)
End 
Nun hole dir dieses Tool:
http://freenet-homepage.de/gnozal/PureFORM.zip

Nun machst du folgendes:
1. Starte Pureform
2. Klicke "Project" an
3. Wähle "Translate from source"
4. Öffne deine PB-Source-Datei
5. Im "Code View"-Fenster den Button "Complete Code" anklicken
6. Projects->Save as Code auswählen

Lade diese erzeugte PB-Datei in die PB-IDE und pflücke sie auseinander.
Du hast hier einen Code komplett mit dem gesamten Eventhandling.
Dann vergleiche das Eventhandling von @Kaeru Gaman:

Code: Alles auswählen

Repeat
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_CloseWindow
      EXIT = 1
  EndSelect
Until EXIT

CloseWindow(#Window_Main)

End
Dann werde dir noch klar über diese Events:

Code: Alles auswählen

  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
  
  WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
  
  GadgetID = EventGadget() ; Is it a gadget event?
  
  EventType = EventType() ; The event type
Wenn du das gemacht hast, dann hast du schon viel gelernt.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

tool oder nicht ist ja jedem selber überlassen...

ich hab das minimalsnippet noch mal ergänzt um die Abfrage des Buttons:

Code: Alles auswählen

  ButtonGadget(#Button_Exit,10,400,100,40,"Feierabend") 
; **
; ** Main Loop
; **
Repeat
  Event = WaitWindowEvent()
  EvGad = EventGadget()
  Select Event
    Case #PB_Event_Gadget
; **
; ** All Gadgets
; **
      Select EvGad
        Case #Button_Exit
          EXIT = 1
      EndSelect
; **
; ** Other Events
; **
    Case #PB_Event_CloseWindow
      EXIT = 1
  EndSelect
; **
; ** End Of Main Loop
; **
Until EXIT
CloseWindow(#Window_Main)
End
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten