Forum | | | | - Seite 1 - |
| Penguin Tux | Hallo,
ich möchte mich ersteinmal vorstellen. Mein Name ist Tony, ich bin 15 Jahre alt und besuche eine Realschule in Chemnitz. Da ich jetzt Sommerferien habe und ich nichts weiter zu tun habe, habe ich mir vorgenommen ein kleines Netzwerkanalysetool zu schreiben. Auf der suche nach einer einfachen Programmiersprache bin ich auf XProfan gestoßen.
Ich habe alles nötige gedownloaded und installiert, anschließen habe ich nach einem Pingcode gesucht und habe diesen:
declare pingstring$,ping$,ping%
********************************************************************
Proc Ping
Parameters nic$,pingdatei1$,pingdatei2$
let pingstring$="PING.EXE",nic$,">",pingdatei1$
Assign #6,pingdatei2$
Rewrite #6
Print #6,pingstring$
Close #6
WinExecwait(pingdatei2$,0)
Assign #5,pingdatei2$
Erase #5
ASSIGN #3,pingdatei1$
RESET #3
Ping%=0
WHILENOT EOF(#3)
input #3,ping$
ping$=mid$(ping$,1,11)
case equ$(ping$,"Antwort von"):Ping%=1
WEND
CLOSE #3
Assign #1,pingdatei1$
Erase #1
EndProc
********************************************************************
Beschreibung:
Es gibt zwar schon eine schnelle und schöne Onlineabfrage über API,
aber leider gibt die Funktion nur 1 für Online zurück, wenn
man über ein Standart DFÜ eingewählt ist.
Diese Prozedur ist halt nur etwas langsamer aber man kann sogar DSL
(also - keine DFÜ-Verbindung) oder das alte T-Online u.s.w abfragen!!
alles mit einem Stern umrandete ist wichtig für die Abfrage
Rolf Koch - Rokosoftware - Koblenz 2002
BEISPIEL
WINDOWSTYLE 31
Window 200,200-300,80
Windowtitle "Onlinstatus-Prüfung ohne Api"
TextColor RGB(0,0,255),-1
UseFont "TIMES NEW ROMAN",20,10,0,0,0
DRAWTEXT 40,10,"..moment ermittele!"
HIER JETZT DER AUFRUF DER PROZEDUR:********************
PING ADRESSE,ERGEBNISDATEI,BATCHDATEI
Parameter
1.) Webadresse - eine immer vorhandene wie www.nic.de
2.) Dateiname, in welche Pingergebnis geschrieben wird - wird wieder gelöscht!
3.) Dateiname, um Ping korrekt aufzurufen. - wird wieder gelöscht!
********************************************************
TextColor RGB(255,255,255),RGB(255,255,255)
DRAWTEXT 40,10," "
UseFont "TIMES NEW ROMAN",25,20,1,0,0
TextColor RGB(0,0,255),-1
Ping "192.168.0.7","PINGTEST.TXT","PING.BAT"
if equ(ping%,1)
DRAWTEXT 25,10,"Erreichbar"
else
DRAWTEXT 25,10,"Nicht erreichbar"
endif
waitinput
Diesen Code habe ich mir nach meinen Bedürfnissen zurechtgeschnitten und er sieht wie folgt aus. Dazu müsste ich die von mir ausgedachte Funktionsweise erklären.
Es ist geplant, dass ich ein Tool schreibe, welches möglichst einfach eine erste Hilfe für Schüler und Lehrer bietet. Bemerkt ein User das er keinen Internetzugang hat, führt er das Tool aus, welches der Reihe nach erst den Server anpingt, dann einen anderen Client im Netzwerk und dann noch einen Rechner von außerhalb (z.B. Google). Wenn es bei einer der Schritte keine Rückmeldung gibt, soll eine Meldung mit Tips zur Behebung auf dem Bildschrim erscheinen.
Nun zum Code:
declare pingstring$,ping$,ping%
Proc Ping
Parameters nic$,pingdatei1$,pingdatei2$
let pingstring$="PING.EXE",nic$,">",pingdatei1$
Assign #6,pingdatei2$
Rewrite #6
Print #6,pingstring$
Close #6
WinExecwait(pingdatei2$,0)
Assign #5,pingdatei2$
Erase #5
ASSIGN #3,pingdatei1$
RESET #3
Ping%=0
WHILENOT EOF(#3)
input #3,ping$
ping$=mid$(ping$,1,11)
case equ$(ping$,"Antwort von"):Ping%=1
WEND
CLOSE #3
Assign #1,pingdatei1$
Erase #1
EndProc
WINDOWSTYLE 31
Window 200,200-500,80
Windowtitle "Onlinstatus-Prüfung ohne Api"
TextColor RGB(0,0,255),-1
UseFont "TIMES NEW ROMAN",20,10,0,0,0
DRAWTEXT 40,10,"..moment ermittele!"
TextColor RGB(255,255,255),RGB(255,255,255)
DRAWTEXT 40,10," "
UseFont "CANDARA",25,20,1,0,0
Ping "127.0.0.1","PINGTEST.TXT","PING.BAT"
if equ(ping%,1)
TextColor RGB(0,255,0),-1
DRAWTEXT 25,10,"Server Erreichbar"
else
TextColor RGB(255,0,0),-1
DRAWTEXT 25,10,"Server Nicht erreichbar"
endif
Ping "192.168.0.1","PINGTEST.TXT","PING.BAT"
if equ(ping%,1)
TextColor RGB(0,255,0),-1
DRAWTEXT 25,10,"Client Erreichbar"
else
TextColor RGB(255,0,0),-1
DRAWTEXT 25,10,"Client Nicht erreichbar"
endif
Ping "www.google.de","PINGTEST.TXT","PING.BAT"
if equ(ping%,1)
TextColor RGB(0,255,0),-1
DRAWTEXT 25,10,"Google Erreichbar"
else
TextColor RGB(255,0,0),-1
DRAWTEXT 25,10,"Google Nicht erreichbar"
endif
waitinput
Ein Problem, welches sich zur Zeit auftut, ist die Tatsache das der Fensterinhalt nicht gelöcht wird. Das heißt das "Server Erreichbar", "Client Erreichbar" und "Google Erreichbar" übereinander geschrieben werden, also brauche ich eine Möglichkeit den Inhalt des Fensters nach jedem Schritt zu löschen. Dabei bin auf
gestoßen. Nutze ich diese Möglichkeit vor bzw. nach "Server Erreichbar" wird "Server Erreichbar" gar nicht angezeigt.
Für eine kleine Hilfestellung wäre ich sehr dankbar.
Danke Tony |
| | | | |
| | | | - Seite 6 - |
| | Penguin Tux | | | | | |
| | Rolf Koch | Tony? Was genau willst Du zerstören? Genau den Dialog! Wenn Du sagst: DLG&=Create("DIALOG".... , dann speichert Windows das Handle in DLG& Dies ist eine eindeutige Nummer wie 127222 oder so, welche von Windows vergeben wird. Was soll also bei Dir zerstört werden? 1 oder 0? Nein! Es soll der Dialog zerstört werden. Bedeutet: Wie ich oben schon geschrieben habe: DESTROYWINDOW(DLG&) Genauso verhält es sich mit SHOWWINDOW SHOWWINDOW(BUTTON1&,0) versteckt ein Objekt SHOWWINDOW(BUTTON1&,1) bringt es wieder zum Vorschein. Aber wenn Du DLG& per Destroywindow wieder zerstört hast, dann kannst Du es natürlich nicht mehr mit SHOWWINDOW anzeigen, da es das Handle nicht mehr gibt. Also dann wieder neu erstellen und daran denken in Deinem Fall wieder DIALOGENDE%=0 zu setzen, damit die Schleife nicht wieder direkt beendet wird. Du kannst aber anstatt DESTROYWINDOW wirklich SHOWWINDOW(DLG&,0) nach dem Dialogerstellen setzen um es zu verstecken und wenn Klick auf Hilfebutton das Hilfefenster per SHOWWINDOW(DLG&,1) wieder anzeigen. Nach Klick auf HILFE SCHLIESSEN einfach wieder SHOWWINDOW(DLG&,0) und schon wird es wieder versteckt.
P.S.: iF hat Recht, lese Dir bitte genau jeden Satz in der Hilfe durch, denn Du benötigst kein DEF.... Ausschnitt Hilfe zu SHOWWINDOW:
N1 : LongInt - Fenster-Handle
N2 : Integer - Abbildungsmodus (1 .. 9)
Das Fenster mit dem Handle N1 wird im Modus N2 angezeigt. Das Ergebnis ist 1 wenn das Fenster vorher sichtbar war oder 0, wenn es vorher versteckt (unsichtbar) war.
Darunter stehender Text ist nur zur Erklärung der passenden API, welche Du in Deiner Profanversion nicht benötigst. |
| | | | |
| | Penguin Tux | Ich komme gerade echt nicht hinterher
Also, mein Code für das Programm selbst sieht jetzt so aus: KompilierenMarkierenSeparierendeclare pingstring$, ping$, ping%
Proc Ping
Parameters nic$,pingdatei1$,pingdatei2$
let pingstring$="PING.EXE",nic$,">",pingdatei1$
Assign #6,pingdatei2$
Rewrite #6
Print #6,pingstring$
Close #6
WinExecwait(pingdatei2$,0)
Assign #5,pingdatei2$
Erase #5
ASSIGN #3,pingdatei1$
RESET #3
Ping%=0
WHILENOT EOF(#3)
input #3,ping$
ping$=mid$(ping$,1,11)
case equ$(ping$,"Antwort von"):Ping%=1
WEND
CLOSE #3
Assign #1,pingdatei1$
Erase #1
EndProc
WINDOWSTYLE 31
Window 200,200-500,180
Windowtitle "PiRePro by penguin"
TextColor RGB(0,0,255),-1
UseFont "TIMES NEW ROMAN",20,10,0,0,0
DRAWTEXT 40,10,"..moment ermittele!"
TextColor RGB(255,255,255),RGB(255,255,255)
DRAWTEXT 40,10," "
UseFont "CANDARA",25,20,1,0,0
Ping "127.0.0.1","PINGTEST.TXT","PING.BAT"
if equ(ping%,1)
TextColor RGB(0,255,0),-1
DRAWTEXT 25,10,"Server Erreichbar"
else
TextColor RGB(255,0,0),-1
DRAWTEXT 25,10,"Server Nicht erreichbar"
endif
Hier Code für Fehlermeldung/Tipbox
Ping "192.168.0.1","PINGTEST.TXT","PING.BAT"
if equ(ping%,1)
TextColor RGB(0,255,0),-1
DRAWTEXT 25,40,"Client Erreichbar"
else
TextColor RGB(255,0,0),-1
DRAWTEXT 25,40,"Client Nicht erreichbar"
endif
Hier Code für Fehlermeldung/Tipbox
Ping "www.google.y","PINGTEST.TXT","PING.BAT"
if equ(ping%,1)
TextColor RGB(0,255,0),-1
DRAWTEXT 25,70,"Extern Erreichbar"
else
TextColor RGB(255,0,0),-1
DRAWTEXT 25,70,"Extern Nicht erreichbar"
endif
Hier Code für Fehlermeldung/Tipbox
Hier Code für Meldung des Erfolgs
TextColor RGB(0,0,0),-1
UseFont "CANDARA",15,10,1,0,0
DRAWTEXT 25,120,"Zum Beenden drücken Sie bitte eine beliebige Taste"
waitinput
...und der für das Fenster: KompilierenMarkierenSeparieren>>>>> AB HIER KOPIEREN UND IN EIGENEN CODE EINBINDEN <<<<<<<<<<<<
DEF GETSYSCOLOR(1) !"USER32","GetSysColor"
SET("TRUECOLOR",1)
$I C:DOKUMENTE UND EINSTELLUNGENTONYDESKTOPROCLIBUSER.INC (Für WIN32 OBJEKTE)
PROC DIALOG ---------------------------------------------------------------------------> Dialoganfang
DECLARE DLG&, DIALOGENDE%
DECLARE TEXT1&
DECLARE BUTTON1&
PROC BUTTON1_ONCLICK
GETMESSAGE
DIALOGENDE%=1
ENDPROC
DLG&=CREATE("DIALOG",%HWND,"Neues Fenster",236,32,640,500)
USEFONT "MS Sans Serif",13,0,0,0,0
SETDIALOGFONT 1
TEXT1& =@CREATE("TEXT",DLG&,"...Hilfetext...",0204,0101,0070,0020)
PROC DLG_REFRESH
SET("AUTOPAINT",1)
STARTPAINT DLG&
DRAWFRAME 0130,0080,0200,0120,2,15
ENDPAINT
ENDPROC
BUTTON1& =@CREATE("BUTTON",DLG&,"OK",0200,0133,0070,0030)
SETFOCUS(DLG&)
DLG_REFRESH
DIALOGENDE%=0
WHILENOT DIALOGENDE%
WAITINPUT
If %KEY=2
DIALOGENDE%= 1
ELSEIF %WMPAINT
DLG_REFRESH
ELSEIF GETFOCUS(BUTTON1&) BUTTON
BUTTON1_ONCLICK
ENDIF
ENDWHILE
DESTROYWINDOW(DLG&)
ENDPROC --------------------------------------------------------------------------------> Dialogende
SET("AUTOPAINT",2)
>>>>> HIER KOPIERENDE FÜR EIGENEN CODEEINBAU <<<<<<<<<<<<<<<<<<<<
Also muss ich weder 1 noch 0 zerstören. |
| | | | |
| | | Du musst zumindest vor dem Programmende alle Controls zerstören, welche Du auch erstellt hast. Das verlangt nicht z.B. Windows XP, aber das gute Programm!
erstellst du also eins
a%=createText(...
musst Du es vor dem Programmende auch wieder
destroyWindow(a%)
zerstören.
Ich habe jetzt nicht nachgesehen ob Du Controls verwendest!
Nur das %hWnd musst/solltest Du nicht zerstören, das hat hier und da ne Sonderbehandlung.
Nachtrag: Du erstellst mindestens ein text ein dlg und ein button, spätestens vor Programmende sollten diese erzeugten Controls auch wieder über Ihr Handle per destroyWindow entfernt werden. |
| | | | |
| | Jörg Sellmeyer |
erstellst du also eins
a%=createText(...
musst Du es vor dem Programmende auch wieder
Das halte ich aber für ein Gerücht! Wenn das Elternfenster zerstört wird reicht das völlig. Nur wenn man ein Control mit der gleichen Varablenbezeichnung neu erstellen will muß man es vorher zerstören, da sonst der Zugriff darauf nicht mehr möglich ist. Obwohl selbst dann beim Programmende die Zerlegung von Windows übernommen wird. |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 21.07.2008 ▲ |
| |
| | Penguin Tux | Sry Leute, aber könntet ihr mal wieder Klartext, ich komm da ganz einfach noch nciht so schnell mit. Mir würde es recihen wenn ich weiß, wie ich das fenster erscheinen lasse und durch das klicken von ok wieder verschwinden lasse. |
| | | | |
| | Jörg Sellmeyer | Hallo Pingu, Vielleicht hilft Dir das hier ja erstmal weiter: KompilierenMarkierenSeparierenDeclare btn1&,dlg&,ende%
Proc Dialog
Declare btnDlg&,dlgende%
dlg& = CreateDialog(%hwnd,"Fenster",40,40,300,400)
btnDlg& = CreateButton(dlg&,"verschwinden",10,10,120,30)
WhileNot dlgende%
WaitInput
If GetFocus(btnDlg&)
dlgende% = 1
DestroyWindow(dlg&)
EndIf
Wend
EndProc
WindowTitle "Buttontest"
Window 10,10,500,400
btn1& = CreateButton(%hwnd,"zeigen",10,10,60,30)
WhileNot ende%
WaitInput
If GetFocus(btn1&)
Dialog
EndIf
Wend
|
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 21.07.2008 ▲ |
| |
| | Penguin Tux | KompilierenMarkierenSeparierenDeclare btn1&,dlg&,ende%
WindowTitle "Hilfe"
Window 10,10,500,400
btnDlg& = CreateButton(dlg&,"OK",10,10,120,30)
WhileNot dlgende%
WaitInput
If GetFocus(btnDlg&)
dlgende% = 1
DestroyWindow(dlg&)
EndIf
Wend
Der speckert jetzt bei Zeile 5 rum. Ich habe mir den geposteten COde einfach mal angeguckt und bin nur so weit gekommen.
Edit: Ich habe jetzt ein "Proc Dialog" an den Anfang gesetzt und ein "EndProc" ans Ende, die Fehlermeldung ist jetzt zwar weg, das Fenster dafür auch. |
| | | | |
| | Rolf Koch | Du hast ende% declariert, aber nutzt unten dlgende% darum meckert er. Also declare dlgende% anstatt ende% - ach und noch viel mehr Variablen welche garnicht benutzt werden und so weiter. Schau und vergleiche: KompilierenMarkierenSeparieren |
| | | | |
| | Penguin Tux | | | | | |
| | Rolf Koch | Hab mein obiges Posting erweitert da siehste es. Siehst Du irgendwo DECLARE BTNDLG& in Deinem Code? Deswegen wird gemeckert. |
| | | | |
| | Penguin Tux | Danke, jetzt Funktioniert es. Ich hatte ja garnicht so viel falsch, wenn man bedenkt das ich das erst seit gestern machen. Logisches denken hilft eben doch.
Wo wir gerade dabei sind. Wie schlage ich mich eigentlich? Ich frage zwar viel, aber dazu seit ihr ja da |
| | | | |
|
AntwortenThemenoptionen | 24.051 Betrachtungen |
ThemeninformationenDieses Thema hat 9 Teilnehmer: |