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 !!! :allright:

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! :o 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.