Handhabung einer chm-Datei

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
dibro
Beiträge: 143
Registriert: 11.03.2006 12:52
Computerausstattung: Win 10 64 bit
Wohnort: Solingen

Handhabung einer chm-Datei

Beitrag von dibro »

Hallo zusammen,
ich brauche Hilfe zur Hilfe :)
Ich hab mir eine CHM-Datei gestrickt und rufe die mit openhelp() auf. Soweit ok.
Aber wann mache ich die wieder zu, und wie (nun sagt nicht mit closehelp()), ich meine zu welchem Zeitpunkt.
Wenn ich mein Prog beende, schließt PB die chm wohl von alleine. Klicke ich zwischendurch auf X = close Window beim Helpfenster, stürzt PB ab.:cry:
In der Doku ist die Beschreibung zur Hilfe sehr dünn ausgefallen. Die Statuszeile zeigt bei PB4.0 auch noch Flags an, aber nirgendwo kann ich einen Hinweis darauf finden.
Die Forensuche hat auch nichts gebracht /:->
Letzte Hoffnung: Forum.
Wer weiß weiter ?
Gruß aus Solingen, PB 6.0 Win 10 Pro
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Beitrag von Pelagio »

Hallo dibro,

Ich habe jetzt auch das Erste mal mit einer Helpdatei hantiert.

Code: Alles auswählen

OpenHelp(#BASEFILENAME +".chm", #Null$)
Bei mir hat es keine Probleme gegeben. Ich öffne und schließe die Datei ohne das PB 4.0 abstürzt. Dein Fehler muss irgendwo anders liegen. So ohne weitere Information kann ich Dir leider auch nicht sagen wo. :oops:
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Handhabung einer chm-Datei

Beitrag von Kiffi »

Code: Alles auswählen

PostMessage_(hwnd,#WM_CLOSE,0,0) 
... wäre eine Möglichkeit

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
dibro
Beiträge: 143
Registriert: 11.03.2006 12:52
Computerausstattung: Win 10 64 bit
Wohnort: Solingen

Beitrag von dibro »

Jau, der Fehler lag woanders:
ich habe die Hilfe aus einer Procedur heraus aufgerufen und das mag PB wohl nicht, da bleibt irgendwas stehen das auf irgendwas wartet.
Aus der WaitWindowEvent-Schleife geht's :allright:

Mit

Code: Alles auswählen

PostMessage_(hwnd,#WM_CLOSE,0,0)
kann ich vorerst nichts anfangen, ist wohl WinApi, hab ich noch nix mit gemacht.
Bei F1 verlangt PB da die WIN32.hlp.
Wo bekomme ich die her ?
Gruß aus Solingen, PB 6.0 Win 10 Pro
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

v6.00
Benutzeravatar
dibro
Beiträge: 143
Registriert: 11.03.2006 12:52
Computerausstattung: Win 10 64 bit
Wohnort: Solingen

Beitrag von dibro »

Zu früh gefreut.
Nach Schließen der Help läuft das Prg zwar weiter, hängt sich aber auf, sobald eine Dateioperation durchgeführt werden soll oder beim Schließen, sogar im Debugger bleibt es hängen.
Ich hab ja auch dasselbe Problem mit der PB-IDE und jaPBe, und das auf 3!! verschiedenen Rechnern mit XP Prof SP2. Sobald ich die PB-Hilfe explizit schließe, hängt das Prog. Ist wohl irgend ein alter dicker Bug.
Bei meiner Frage im Forum bin ich ja da auch nicht weiter gekommen.
Angeblich läuft bei den anderen alles - komisch.
Bei keinem meiner anderen Programme - der ganze Office-Kram, CAD, usw. läuft das ohne Mucken. Ich hab ein Netz, aber meist nicht alle Rechner an. Vielleicht sucht da irgend etwas das Netz ab - wer weiß.
Vielleicht muss ich da doch etwas mit dem Windows API machen, kann ich aber noch nicht. Wo bekomme ich da Hilfe?
Gruß aus Solingen, PB 6.0 Win 10 Pro
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> Vielleicht muss ich da doch etwas mit dem Windows API machen, kann ich
> aber noch nicht.

sorry, ich dachte, wir wären im Allgemein-Forum. Hier also noch mal etwas
ausführlicher:

Du schickst in Deinem Programm dem Hilfe-Fenster eine Mitteilung, dass
es sich schliessen soll. Ist also so, als ob Du auf das 'X' drückst.

Die einzige Angabe, die Du brauchst, ist der Text, der in der Titelzeile des
Hilfe-Fensters steht. Nehmen wir an, dort steht: "dibro". Dann kannst Du
das Fenster im Speicher mit der API-Funktion FindWindow_() suchen.
Wenn es gefunden wird, dann liefert diese Funktion Dir das Handle des
Fensters zurück (ist so 'ne Art eindeutiger Bezeichner). Danach kannst Du
dem gefundenen Fenster das WM_CLOSE schicken

Code: Alles auswählen

hWnd = FindWindow_(0,"dibro") 
If hWnd
  PostMessage_(hWnd,#WM_CLOSE,0,0)
EndIf
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
dibro
Beiträge: 143
Registriert: 11.03.2006 12:52
Computerausstattung: Win 10 64 bit
Wohnort: Solingen

Beitrag von dibro »

@Thomas Obermeier
danke für den Link, hab ich mir mal gezogen und eingespielt. Aber das ist ja ganz alter Käse aus dem vergangenen Jahrhundert. Heute gibt es ja keine hlp's mehr. Außerdem steige ich da nicht durch, da braucht man wohl noch einige Hintergrundkenntnisse. Deshalb hab ich ja jetzt PB nachdem ich mal in VBA reingeguckt (und schnell wieder weggeguckt) habe.

@Kiffi
...Wenn ich das Help Window aber über das X oben rechts schon wieder geschlossen habe, kann ich es doch nicht mehr suchen ??
Gruß aus Solingen, PB 6.0 Win 10 Pro
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Irgendwie habe ich das noch nicht verstanden. Wenn durch ein Windows
eine Hilfe geöffnet wurde, dann läßt sie sich doch trotzdem beenden, wenn
man das X vom Windows oder der Hilfe anklickt. Da stürtzt bei mir auch nichts ab.
Zusätzlich kann man ja per Events auch reagieren und es
vorzeitig schließen lassen, was auch ohne API geht, wenn es nicht ein
gezieltes Hilfefenster sein soll. Dazu ist die API von kiffi genau richtig ;)

Code: Alles auswählen

OpenWindow(0,#PB_Ignore,#PB_Ignore,300,300,"Ausgabe zur Hilfe")
OpenHelp("MVCOM.chm","ComOpen.html")
Repeat 
 event=WaitWindowEvent()
 Select event   
   Case #PB_Event_CloseWindow    ; prüft ob das Schließfelt geschlossen 
     CloseHelp()
 EndSelect
Until event=#PB_Event_CloseWindow ; Programmende
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Falko hat geschrieben:

Code: Alles auswählen

CloseHelp()
wie? Das gibt's wirklich? [nachguck] Tatsächlich! Tscha, dibro, dann brauchst
Du Dich mit meinem Code nicht weiter zu befassen. Schön, das wir drüber
geredet haben ;-)
dibro hat geschrieben:@Kiffi
...Wenn ich das Help Window aber über das X oben rechts schon wieder geschlossen habe, kann ich es doch nicht mehr suchen ??
Suchen kannst Du immer. Ist halt die Frage, ob was gefunden wird. Wenn
das Hilfe-Fenster nicht gefunden wird, dann bekommste auch kein Handle und
brauchst auch nicht das WM_CLOSE zu senden. Wäre ja auch unsinnig,
etwas schliessen zu wollen, was schon geschlossen ist.

Grüße ... Kiffi
a²+b²=mc²
Antworten