KHR, 16.03.2008 12:54: Hallo miteinander
ich hab mal angefangen mit xprofan10 ein prgramm zu schreiben, das ich gern zur Arbeit nutzen möchte.
Mittlerweile läuft ein grosser Teil sehr gut aber mit den ersten Erweiterungen bin ich ziemlich uns trudeln geraten.
Hier als Beispiel einīTool, das ich zu benutzen gedenke:
proc Durchsatzkalkulator
Declare titel$, EditDialog%, ok%, cancel%,EditDialogEnde%
Declare Edit1&,Edit2&,Edit3&,Edit4&,Edit5&,Edit6&,Edit7&
titel$ = "Durchsatzkalkulator für Freifall"
EditDialog%= @Create("Dialog",%HWnd,Titel$,130,90,600,450)
startpaint EditDialog%
cls Farbe_Grau%
TextColor Farbe_Schwarz%, Farbe_grau%
UseFont "Arial",17,0,1,0,0
drawtext 20, 19,"Maximaldurchsatz"
drawtext 260, 19,"t/h"
drawtext 20, 44,"Nominaldurchsatz"
drawtext 260, 44,"t/h"
drawtext 20, 69,"Schüttgewicht"
drawtext 260, 69,"g/l"
drawtext 20, 94,"Rohrdurchmesser"
drawtext 260, 94,"t/h"
drawtext 20,119,"Fallhöhe"
drawtext 260,119,"m"
drawtext 20,144,"Fixgeschwindigkeit"
drawtext 260,144,"m/s"
OK% = @Create("Button", EditDialog%,"&Berechnen" , 20, 350, 80,30)
CANCEL% = @Create("Button", EditDialog%,"&Ende" , 200, 350, 80,30)
@SetFocus(edit1&)
EditDialogEnde% = 0
' NewStyle& = ~BS_RIGHT | ~BS_VCENTER
@Set("NumWidth",4)
@Set("Decimals",3)
Edit1& = @Create("Edit",EditDialog%, @str$(D_calc_Max_Durchsatz!) , 170 , 15 , 80 , 20)
Edit2& = @Create("Edit",EditDialog%, @str$(D_calc_Nom_Durchsatz!) , 170 , 40 , 80 , 20)
@Set("NumWidth",2)
@Set("Decimals",0)
Edit3& = @Create("Edit",EditDialog%, @str$(d_calc_Schuettgewicht&) , 170 , 65 , 80 , 20)
Edit4& = @Create("Edit",EditDialog%, @str$(D_calc_Durchmesser&) , 170 , 90 , 80 , 20)
@Set("Decimals",1)
Edit5& = @Create("Edit",EditDialog%, @str$(D_calc_Fallhoehe!) , 170 ,115 , 80 , 20)
Edit6& = @Create("Edit",EditDialog%, @str$(D_calc_Fixgeschw!) , 170 ,140 , 80 , 20)
WhileNot EditDialogEnde%
WaitInput
Case @Clicked(CANCEL%):EditDialogEnde% = 1
If @Clicked(OK%)
TextColor Farbe_Schwarz%, Farbe_grau%
UseFont "Arial",17,0,1,0,0
D_calc_Max_Durchsatz! = @val(@GetText$(Edit1&))
D_calc_Nom_Durchsatz! = @val(@GetText$(Edit2&))
d_calc_Schuettgewicht& = @val(@GetText$(Edit3&))
D_calc_Durchmesser& = @val(@GetText$(Edit4&))
D_calc_Fallhoehe! = @val(@GetText$(Edit5&))
D_calc_Fixgeschw! = @val(@GetText$(Edit6&))
d_calc_Fallgeschwindigkeit! = 2*9.80665*D_calc_Fallhoehe!
d_calc_Fallgeschwindigkeit! = @sqrt(d_calc_Fallgeschwindigkeit!)
d_calc_rohrflaeche! = ((D_calc_Durchmesser&/1000 /2) ^2 )*@pi()
d_calc_Max_fuellung! = D_calc_Max_Durchsatz! * 9.80665
d_calc_Max_fuellung! = d_calc_Max_fuellung! / (d_calc_Fallgeschwindigkeit!* d_calc_rohrflaeche! \
*(d_calc_Schuettgewicht&*1000))
d_calc_Max_fuellung! = d_calc_Fallgeschwindigkeit!*(D_calc_Durchmesser&/2000)^2*@Pi()*(d_calc_Schuettgewicht&*1000)
d_calc_Nom_fuellung! = D_calc_Nom_Durchsatz! * 1000000/3600 /d_calc_Max_fuellung! * 100
d_calc_Max_fuellung! = D_calc_Max_Durchsatz! * 1000000/3600 /d_calc_Max_fuellung! * 100
drawtext 310, 94 , "Querschnitt"
drawtext 470, 94 , "mē"
drawtext 310,119 , "Geschwind."
drawtext 470,119 , "m/s"
@Set("NumWidth",2)
@Set("Decimals",2)
@Create("Text",EditDialog%,"Nominal" , 200 , 234 , 80 , 20 )
@Create("Text",EditDialog%,"Maximal" , 280 , 234 , 80 , 20 )
@Create("Text",EditDialog%,"Rohrfüllung ( % )" , 20 , 234 , 160 , 20 )
@Create("Text",EditDialog%,"m/s" , 100 , 259 , 40 , 20 )
@Create("Text",EditDialog%,"m/s" , 100 , 284 , 40 , 20 )
TextColor Text_farbe_2%, Farbe_grau%
UseFont "Arial",17,0,1,0,0
@Set("NumWidth",1)
@Set("Decimals",5)
drawtext 400, 94,@str$(d_calc_rohrflaeche!)
@Set("NumWidth",3)
@Set("Decimals",2)
drawtext 400,119,@str$(d_calc_Fallgeschwindigkeit!)
drawtext 210,259,@str$(d_calc_Nom_fuellung!)
drawtext 290,259,@str$(d_calc_Max_fuellung!)
drawtext 40,284,@str$(D_calc_Fixgeschw! )
drawtext 40,259,@str$(d_calc_Fallgeschwindigkeit!)
ElseIf @Clicked(CANCEL%)
EditDialogEnde% = 1
EndIf
EndWhile
endpaint
@DestroyWindow(EditDialog%)
endproc
' Variablen Durchsatzkalkulator
Declare D_calc_Max_Durchsatz!
Declare D_calc_Nom_Durchsatz!
Declare D_calc_Durchmesser&
Declare D_calc_Fallhoehe!
Declare D_calc_Fixgeschw!
declare d_calc_Max_fuellung!
declare d_calc_Nom_fuellung!
declare d_calc_Fix_fuellung!
declare d_calc_Fallgeschwindigkeit!
declare d_calc_Schuettgewicht&
declare d_calc_rohrflaeche!
Declare Text_Farbe_1%
Declare Text_Farbe_2%
Declare Farbe_weiss%
Declare Farbe_schwarz%
Declare Farbe_grau%
Text_Farbe_1% = @RGB(0,176,0)
Text_Farbe_2% = @RGB(0,0,230)
Farbe_weiss% = @RGB(255,255,255)
Farbe_schwarz% = @RGB(0,0,0)
Farbe_grau% = @RGB(220,220,220)
D_calc_Max_Durchsatz! = 300
D_calc_Nom_Durchsatz! = 200
d_calc_Schuettgewicht& =1100
D_calc_Durchmesser& = 200
D_calc_Fallhoehe! = 2
D_calc_Fixgeschw! = 4.75
cls
Durchsatzkalkulator
Ok Ok, das ist alles etwas ungeordnet und zusammengestückelt aus Fragmenten aus der Hilfe und anderen Testprogrammen. Ich habs aber aus dem grossen ganzen rausschneiden müssen und der code zeigt auch noch recht gut verschiedene Versuchsstadien ( mix zwischen create("text"..) und drawtext,) und und und .... Man verzeihe bitte einem Anfänger!
Mein Probleme sind:
wie bekomme ich per Drawtext eine ausgabe auf den rechten Rand ausgerichtet?
Kann ich die Texte immer wieder mit @Create("Text",..) in einer Schleife an der selben Bildschirmposition teste ausgeben oder stapels sich dann irgendwo im Hintergrund die Text-elemente ?
Was mach ich, dass sich nicht jedesmal die Hintergrundfarbe meines Dialogfensters auf Standard zurücksetzt, wenn es einmal im Hintergrund war.
Wieso verschwinden bei dieser Gelegenheit auch gleich die Drawtext-Ausgaben?
Rolf Koch, 16.03.2008 13:05: Hab nicht mehr viel Zeit grad, nur schnell zu Createtext:
Nicht neu erstellen, sondern vorhandenes Textcontrol nutzen und neuen Text reinschreiben:
Settext handle&,"Neuer Text"
David Strutz, 16.03.2008 15:26: @Karl: Die Codesuche hilft Dir hier: [...] 
Frank Abbing, 16.03.2008 16:32: Hallo Karl,
Zitat: wie bekomme ich per Drawtext eine ausgabe auf den rechten Rand ausgerichtet?
Ich habe deinen Code dazu mal angepasst:
proc Durchsatzkalkulator
Declare titel$, EditDialog%, ok%, cancel%,EditDialogEnde%
Declare Edit1&,Edit2&,Edit3&,Edit4&,Edit5&,Edit6&,Edit7&
Declare hdc&
titel$ = "Durchsatzkalkulator für Freifall"
EditDialog%= @Create("Dialog",%HWnd,Titel$,130,90,600,450)
startpaint EditDialog%
hdc&=%hdc
cls Farbe_Grau%
TextColor Farbe_Schwarz%, Farbe_grau%
UseFont "Arial",17,0,1,0,0
SetTextAlign(hdc&,0)
drawtext 20, 19,"Maximaldurchsatz"
drawtext 20, 44,"Nominaldurchsatz"
drawtext 20, 69,"Schüttgewicht"
drawtext 20, 94,"Rohrdurchmesser"
drawtext 20,119,"Fallhöhe"
drawtext 20,144,"Fixgeschwindigkeit"
SetTextAlign(hdc&,2)
drawtext 290, 19,"t/h"
drawtext 290, 44,"t/h"
drawtext 290, 69,"g/l"
drawtext 290, 94,"t/h"
drawtext 290,119,"m"
drawtext 290,144,"m/s"
OK% = @Create("Button", EditDialog%,"&Berechnen" , 20, 350, 80,30)
CANCEL% = @Create("Button", EditDialog%,"&Ende" , 200, 350, 80,30)
@SetFocus(edit1&)
EditDialogEnde% = 0
' NewStyle& = ~BS_RIGHT | ~BS_VCENTER
@Set("NumWidth",4)
@Set("Decimals",3)
Edit1& = @Create("Edit",EditDialog%, @str$(D_calc_Max_Durchsatz!) , 170 , 15 , 80 , 20)
Edit2& = @Create("Edit",EditDialog%, @str$(D_calc_Nom_Durchsatz!) , 170 , 40 , 80 , 20)
@Set("NumWidth",2)
@Set("Decimals",0)
Edit3& = @Create("Edit",EditDialog%, @str$(d_calc_Schuettgewicht&) , 170 , 65 , 80 , 20)
Edit4& = @Create("Edit",EditDialog%, @str$(D_calc_Durchmesser&) , 170 , 90 , 80 , 20)
@Set("Decimals",1)
Edit5& = @Create("Edit",EditDialog%, @str$(D_calc_Fallhoehe!) , 170 ,115 , 80 , 20)
Edit6& = @Create("Edit",EditDialog%, @str$(D_calc_Fixgeschw!) , 170 ,140 , 80 , 20)
WhileNot EditDialogEnde%
WaitInput
Case @Clicked(CANCEL%):EditDialogEnde% = 1
If @Clicked(OK%)
TextColor Farbe_Schwarz%, Farbe_grau%
UseFont "Arial",17,0,1,0,0
D_calc_Max_Durchsatz! = @val(@GetText$(Edit1&))
D_calc_Nom_Durchsatz! = @val(@GetText$(Edit2&))
d_calc_Schuettgewicht& = @val(@GetText$(Edit3&))
D_calc_Durchmesser& = @val(@GetText$(Edit4&))
D_calc_Fallhoehe! = @val(@GetText$(Edit5&))
D_calc_Fixgeschw! = @val(@GetText$(Edit6&))
d_calc_Fallgeschwindigkeit! = 2*9.80665*D_calc_Fallhoehe!
d_calc_Fallgeschwindigkeit! = @sqrt(d_calc_Fallgeschwindigkeit!)
d_calc_rohrflaeche! = ((D_calc_Durchmesser&/1000 /2) ^2 )*@pi()
d_calc_Max_fuellung! = D_calc_Max_Durchsatz! * 9.80665
d_calc_Max_fuellung! = d_calc_Max_fuellung! / (d_calc_Fallgeschwindigkeit!* d_calc_rohrflaeche! \
*(d_calc_Schuettgewicht&*1000))
d_calc_Max_fuellung! = d_calc_Fallgeschwindigkeit!*(D_calc_Durchmesser&/2000)^2*@Pi()*(d_calc_Schuettgewicht&*1000)
d_calc_Nom_fuellung! = D_calc_Nom_Durchsatz! * 1000000/3600 /d_calc_Max_fuellung! * 100
d_calc_Max_fuellung! = D_calc_Max_Durchsatz! * 1000000/3600 /d_calc_Max_fuellung! * 100
drawtext 310, 94 , "Querschnitt"
drawtext 470, 94 , "mē"
drawtext 310,119 , "Geschwind."
drawtext 470,119 , "m/s"
@Set("NumWidth",2)
@Set("Decimals",2)
@Create("Text",EditDialog%,"Nominal" , 200 , 234 , 80 , 20 )
@Create("Text",EditDialog%,"Maximal" , 280 , 234 , 80 , 20 )
@Create("Text",EditDialog%,"Rohrfüllung ( % )" , 20 , 234 , 160 , 20 )
@Create("Text",EditDialog%,"m/s" , 100 , 259 , 40 , 20 )
@Create("Text",EditDialog%,"m/s" , 100 , 284 , 40 , 20 )
TextColor Text_farbe_2%, Farbe_grau%
UseFont "Arial",17,0,1,0,0
@Set("NumWidth",1)
@Set("Decimals",5)
drawtext 400, 94,@str$(d_calc_rohrflaeche!)
@Set("NumWidth",3)
@Set("Decimals",2)
drawtext 400,119,@str$(d_calc_Fallgeschwindigkeit!)
drawtext 210,259,@str$(d_calc_Nom_fuellung!)
drawtext 290,259,@str$(d_calc_Max_fuellung!)
drawtext 40,284,@str$(D_calc_Fixgeschw! )
drawtext 40,259,@str$(d_calc_Fallgeschwindigkeit!)
ElseIf @Clicked(CANCEL%)
EditDialogEnde% = 1
EndIf
EndWhile
endpaint
@DestroyWindow(EditDialog%)
endproc
DEF SetTextAlign(2) ! "gdi32","SetTextAlign"
' Variablen Durchsatzkalkulator
Declare D_calc_Max_Durchsatz!
Declare D_calc_Nom_Durchsatz!
Declare D_calc_Durchmesser&
Declare D_calc_Fallhoehe!
Declare D_calc_Fixgeschw!
declare d_calc_Max_fuellung!
declare d_calc_Nom_fuellung!
declare d_calc_Fix_fuellung!
declare d_calc_Fallgeschwindigkeit!
declare d_calc_Schuettgewicht&
declare d_calc_rohrflaeche!
Declare Text_Farbe_1%
Declare Text_Farbe_2%
Declare Farbe_weiss%
Declare Farbe_schwarz%
Declare Farbe_grau%
Text_Farbe_1% = @RGB(0,176,0)
Text_Farbe_2% = @RGB(0,0,230)
Farbe_weiss% = @RGB(255,255,255)
Farbe_schwarz% = @RGB(0,0,0)
Farbe_grau% = @RGB(220,220,220)
D_calc_Max_Durchsatz! = 300
D_calc_Nom_Durchsatz! = 200
d_calc_Schuettgewicht& =1100
D_calc_Durchmesser& = 200
D_calc_Fallhoehe! = 2
D_calc_Fixgeschw! = 4.75
cls
Durchsatzkalkulator
Zitat: Kann ich die Texte immer wieder mit @Create("Text",..) in einer Schleife an der selben Bildschirmposition teste ausgeben oder stapels sich dann irgendwo im Hintergrund die Text-elemente ?
Ja, die stapeln sich dann. Du kannst benutzte Controls aber mit DestroyWindow(controlhandle&) jederzeit freigeben. Ich würde aber feste Controls benutzen und nicht ständig neue generieren.
Zitat: Was mach ich, dass sich nicht jedesmal die Hintergrundfarbe meines Dialogfensters auf Standard zurücksetzt, wenn es einmal im Hintergrund war.
Die einfachste Möglichkeit ist es, deine Controls und Texte direkt auf dem Hauptfenster zu zeichnen. Und gar kein Dialogfenster zu benutzen.
Zitat: Wieso verschwinden bei dieser Gelegenheit auch gleich die Drawtext-Ausgaben?
Für das Neuzeichen auf Dialogfenstern ist der Programmierer selbst zuständig. Beim Hauptfenster hilft dir XProfan. Darum mein Tipp mit dem Hauptfenster.
Jörg Sellmeyer, 16.03.2008 16:38: Ich würde an Deiner Stelle auch die DrawText-Ausgaben mit einem Textcontrol (Create("Text",...)) erledigen. Erspart Dir das ständige neuzeichnen.
Wenn Du mit Create("Text",...) ein Textcontrol erstellst musst Du Dir das Handle speichern. Dann kannst Du jederzeit den Text ändern:
Text1& = @Create("Text",EditDialog%,"Rohrfüllung ( % )" )'ich hoffe, Du hast nur hier in Deinem Beispiel die abschliessenden Klammern vergessen!
WhileLoop 10
SetText Text1&, Str$(&Loop)
Wend
KHR, 16.03.2008 17:01: Hallo miteinander
danke für Eure Zeit und Eure Antworten,
Jetzt wird mir da schon einiges klarer. Aus den Codesnippets hab ich mir dann auch noch einiges zusammengesucht. Irgedwie hab ich zuvor immer nach den falschen Begriffen gesucht. Man muss mit jedem Werkzeug halt umgehen lernen,
ok - normalerweise arbeite ich auch mit handles bei create("TEXTE".... habs aber beim zusammenschustern übersehen und nicht dran gedacht, dass sich eine meiner Fragen bei richtigem Umgang mit der Sprache schon erledigt hat.
Mittlerweile sieht das ganze bei mir nun schon viel besser aus
Dies ist die Offlinevariante vom Thread [Formatieren von Textenausgaben].
©2006 XProfan.Com