Seite 1 von 2
WinHdl --> #WinNr ?
Verfasst: 13.11.2007 20:27
von sibru
Hallo,
ich muß in ´nem Modul die #WinNr zu einem WinHdl ermittelt.
Früher klappte das mal mit
Code: Alles auswählen
Procedure WinHdl2Nr(WHdl.l)
Protected WinNr
While WindowID(WinNr)<>WHdl And WinNr<1000 : WinNr+1 : Wend
ProcedureReturn WinNr
EndProcedure
Seit´m Update auf 3.94 klappt´s nicht mehr: WindowID(nicht geöffnetes #WinNr) liefert nicht mehr 0, sondern ´n Debugger-Error...
Hat jemand ´ne Ahnung, wie ich das umgehen kann ???
!!! nicht mit isWindow(), die Modul-Dateien sollen (erstmal) sowohl mit 3.80 als auch 3.94 funktionsfähig bleiben...
Gruss Siggi
Verfasst: 13.11.2007 20:29
von Thomas
Kannst du es so erklären, dass auch ich verstehe, was du meinst?
(hab vielleicht ne Idee)
Verfasst: 13.11.2007 20:34
von sibru
konkrete Anwendung:
Funktion freeWinNr() soll eine noch nicht benutzt #Windows-Nr liefern:
also via WindowID(TestWinNr) nachsehen, ob´s schon ´n Fenster mit
openwindow(TestWinNr,....) gibt: wenn ja, TestWinNr incrememtieren
... und das Ganze, bis WindowID(TestWinNr) Null liefert(e)...
Verfasst: 13.11.2007 21:15
von edel
Dann schalte den Debugger doch fuer die Procedure aus.
Verfasst: 13.11.2007 21:21
von AND51
1. Das Einsetzen ungültiger WindowID's in WindowID() führt zu einem Fehler (invalid ID), das programm stürzt gnadenlos ab
2. Das eim/ausschalten wie edel es vorschlägt, funktioniert daher nicht
3. Benutze isWindow(), um erst zu prüfen, ob es diese ID gibt
P.S.: Warum benutzt du immernoch 3.94? Warum nicht 4.10?
Verfasst: 13.11.2007 21:27
von AND51
Der Übersicht wegen einen neuen Post, es sei mir vergeben!
Code: Alles auswählen
handle=OpenWindow(761, 0, 0, 0, 0, "AND51")
Debug handle
Procedure GetWindowIDFromHandle(Handle.l, max.l=1000)
While Handle
If IsWindow(max)
If WindowID(max) = Handle
Break
EndIf
EndIf
max-1
Wend
ProcedureReturn max
EndProcedure
Debug GetWindowIDFromHandle(handle)
Zählt die Prozedur rückwärts, kann man bequem noch einen Parameter einbauen, der bestimmt, wie viele WindowID's von
0 bis
max durchprobiert werden sollen. Optionale Parameter gibt es ab PB 4.00,
für 3.94 müsste man das so umstellen:
Code: Alles auswählen
handle=OpenWindow(761, 0, 0, 0, 0, "AND51")
Debug handle
Procedure GetWindowIDFromHandle(Handle.l, max.l)
While Handle
If IsWindow(max)
If WindowID(max) = Handle
Break
EndIf
EndIf
max-1
Wend
ProcedureReturn max
EndProcedure
Debug GetWindowIDFromHandle(handle, 1000)
Verfasst: 13.11.2007 21:29
von sibru
gerade erst -nach ca 3 Jahren gelegentlichen Anrufen- unsern Update-Account bei MasterCreating klar gemacht... und nun beim Upadte von 3.80 auf 3.94 (war anscheinend nicht so viel... Pustekuchen! Wie soll das erst
mit 4.10 aussehen???).
Und der Chef ist genervt von nicht_aufwärz_kompatieblen Update´s
(und den damit verbundenen Kosten...), anscheinend wird´s wohl
bei 3.80 bleiben, hab´ nur ne´ Freigabe von 5:00 Arbeitsstunden für´s
Update von ca 1200 Modulen {=eigenständigen .PBI´s, die von mehreren Prg´s benutzt werden} und knapp 100 kommerziellen Prg´s....)
Gruss Siggi
Verfasst: 13.11.2007 21:40
von sibru
@AND51
Ja, so ähnlich hatte ich mir auch vorgestellt...
Nur läuft´s halt nicht unter PB3.8... Und dieses Problem ist aufgetreten
beim 1. upzudatenen Prg: nu trau´ ich mich noch nicht, alle 1200 PBI´s
auf 3.94 umzubauen... (siehe oben...)
Oder gibt´s ne Möglichkeit, die beim Compilieren aktuelle PB-Version
zu erkennen ? (jaPBe-Version reicht nicht, ich benutzte 22.4..... sowohl
für PB3.8 als auch 3.94...)
- nebenbei -
ich bin immer wieder erstaunt, wie schnell hier die Antworten und Problemlösungen kommen... da müßen ja zig Leute mit richtig Fachwissen
nicht anderes zu tun haben...
Geiles Forum !!!
Gruss Siggi
Verfasst: 13.11.2007 21:53
von edel
@AND51
Woher nimmst du denn diese Weisheit ?
Code: Alles auswählen
Procedure WinHdl2Nr()
Protected WinNr
DisableDebugger
While WindowID(WinNr) And WinNr<1000
WinNr+1
Wend
EnableDebugger
ProcedureReturn WinNr
EndProcedure
OpenWindow(0,0,0,200,200,#PB_Window_SystemMenu,"Test")
OpenWindow(1,0,0,200,200,#PB_Window_SystemMenu,"Test")
Debug WinHdl2Nr()
Verfasst: 13.11.2007 22:10
von AND51
@ edel:
Tatsache!

Bin ich wohl von irgendetwas falschem ausgegangen, ich war mir sicher, dass es sich so verhält, wie du es gesagt hast.
Danke für den Hinweis!
> Oder gibt´s ne Möglichkeit, die beim Compilieren aktuelle PB-Version zu erkennen
Also ab 3.94 gibt es
#PB_Compiler_Version.