Grundsätzliche Frage zur Programmstruktur

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Josef Sniatecki
Beiträge: 657
Registriert: 02.06.2008 21:29
Kontaktdaten:

Beitrag von Josef Sniatecki »

Jetzt wurde ich voll weg geschossssen. (hat ja auch einen Grund :oops: )
Egal...
Trotzdem erspaare ich mir solche Umwege und schreibe gerne in eine
Wurst. :wink:
PB 4.61 | Windows Vista - 32Bit
Homepage

"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Fuer kleine Anwendungen sicherlich ueberzogen, aber sonst dem
Kaese aus der Hilfe vorzuziehen. Alleine "while windowevent wend"
ist schon Grund genug, von der Uebersicht ganz zu schweigen.

Muss natuerlich jeder fuer sich selber wissen.

>>Wiso sollte man die gleichen Event-Prozedur 2x gebrauchen?

Ein Grund steht ja schon oben, z.B. hat man somit noch die Kontrolle
beim befuellen eines Fensters.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

könntest du mal bitte etwas plakativer werden anstatt dich stets in arkane Nebel zu hüllen...?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Andreas_S hat geschrieben:Und wenn es euch jetzt schon um 1 Procedure-call an kommt, dann schreibt euren Code doch gleich in eine Wurst :freak: .
LOL, kein Code mehr, sondern klassischer "Kot" dann sozusagen :mrgreen:

CodeWurst wäre auch mal ein guter Name... egal ob als Nick oder als Programmiersprache
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Kaeru Gaman hat geschrieben:könntest du mal bitte etwas plakativer werden anstatt dich stets in arkane Nebel zu hüllen...?
:?

Code: Alles auswählen

Procedure doEvents(timeout=#PB_Default)
	event = WaitWindowEvent(timeout)
	
	If event = #PB_Event_CloseWindow
		End
	EndIf
	
	If event = #PB_Event_Gadget
		
		
		If EventGadget() = 0	
			SetGadgetText(2,GetGadgetText(0))			
		EndIf
		
		
		If EventGadget() = 1	
			SetGadgetText(2,GetGadgetText(1))			
		EndIf

		
	EndIf
	
EndProcedure

Procedure main()
	
	hwnd = OpenWindow(0,#PB_Ignore,#PB_Ignore,400,300,"")
	
	CreateGadgetList(hwnd)
	
	ListViewGadget(0,5,5,290,140)
	ListViewGadget(1,5,150,290,140)
	
	TextGadget(2,300,5,80,23,"")
		
	For i = 0 To 1000
		AddGadgetItem(0,-1, "item-" + Str(i) )
		AddGadgetItem(1, 0, "item-" + Str(i) )
		doEvents(0)		
	Next
	
	Repeat
		doEvents()			
	ForEver	
	
EndProcedure:main()

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

Beitrag von Kaeru Gaman »

chic!
das sagt überhaupt nix aus!

wenn du dich entsinnen magst, meine Frage war,
warum du der Ansicht bist,
dass ein Eventloop in einer Procedure besser aufgehoben ist
als im Basisteil des Programms.

wenn du das begründen kannst, dann hat die Aussage
Es gibt keinen besseren Weg !
eine Allgemeingültigkeit.

wenn nicht, ist es nur ein gekloppter Spruch.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Franky
Beiträge: 1132
Registriert: 29.08.2004 16:31
Wohnort: Münsterland
Kontaktdaten:

Beitrag von Franky »

Sowas hat als Macro auch vorteile ;)

Allerdings, ein Vorteil, der klar und bestechend bleibt für Edels Methode steht ist folgender:
ICH verwende Standardmäßig die 2 Variablen event und quit

Code: Alles auswählen

Repeat 
   event=WaitwindowEvent()
   If event=blablabla....
   endif 
Until quit<>0
Da ich mir Variablen-Deklaration angewöhnt habe, ist eine Procedure nützlich, da man die Variablen als Protected deklarieren kann und es kein problem gibt, wenn man das mal vergisst.
Wenn ich nämlich ein Dialogfenster öffne und dann wieder Schließe, geschieht das, weil quit<>0 ist. Ist Quit global, schmiert mir dadurch dann auch mein Hauptfenster ab.
Achja, beim allgemeinen Aufbau kann man sich übrigends auch streiten.

Code: Alles auswählen

1. Programm Kommentarkopf
2. Konstanten
3. Globale Variablen und Stukturen (bei grossen Projekten als Include 'Global.pbi')
4. Proceduren und Funktionen
5. Main
6. DataSection
von mk-Soft habe ich mittlerweile über Bord geworfen, weil mein Stil schon fast zum Objektorientierten hin geht.

Wenn ich dann zum Beispiel ein Array mit Statusmeldungen habe, Ruf ich die eigenen Indizes immer über mittels Enumeration deklarierten Konstanten auf (Selbst wenn ich nie über direkte Konstanten auf das Array zugreife, find ich es so einfach übersichtlicher).

Mk-s Methode würde diese Konstanten nun zu den Fenster-Konstanten und Gadget-Konstanten hoch schieben. Aber da haben die doch nun mal garnix zu suchen
:freak:
Falsch zugeordnetes Zitat des Tages: "O'zapft is" - Edward Snowden :)
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 »

Ich wüßte nicht wie man obigen Code anders als in einer Procedure
bewerkstelligen sollte?
Vermeidet z.B. While WindowEvent() : Wend, es wird auch beim aktualisieren
der erstellten Gadgets alle events abgearbeitet.
Einzig andere Alternative wäre ein verstecktes Fenster, das erst nach
Aktualisierung angezeigt wird.
Ausserdem ist Code ausserhalb von Proceduren sowieso nicht so optimal.

Verstehe also das Geschrei von Kaeru nicht
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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

und ich versteh nicht, wie ihr 37 annahmen und stilfragen einfach als begebenheiten annehmen könnt, und dann auch noch herablassend werden, wenn man euch nicht sofort zustimmt.

1. beim beispiel von edel kann man den eventloop auch direkt in der main() procedure einbaun
2. die verwendung einer main() procedure ist auch kein muss, sondern eine stilfrage.

also, wenn ihr hier die dicken machen wollt mit eurem stil,
dann schreibt wenigstens ein paar absätze dazu, um andere überzeugen zu können,
oder noch besser, schreibt mal ein paar tutorials, wo immer wieder jede menge neueinsteiger nach fragen.

aber sich einfach so hinstellen, und so tun als wenn euch der hanf aus dem hintern wächst,
ist weder guter stil noch hat es irgendeine berechtigung.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
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 »

> und so tun als wenn euch der hanf aus dem hintern wächst
Das sollte aber unter uns bleiben :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
Antworten