AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte [IDE-Experte (2006,07,09,10,XE,XE2)] CustomHelp
Thema durchsuchen
Ansicht
Themen-Optionen

[IDE-Experte (2006,07,09,10,XE,XE2)] CustomHelp

Ein Thema von chaosben · begonnen am 29. Sep 2009 · letzter Beitrag vom 8. Jan 2014
Antwort Antwort
Seite 3 von 13     123 45     Letzte »    
Benutzerbild von chaosben
chaosben
Registriert seit: 27. Apr 2005
CustomHelp (2.irgendwas )

... ist ein IDE Experte, der die Delphi Hilfe um ein paar nützliche Funktionen erweitert.

Was soll das?
Du "stehst" in deinem Quellcode und brauchst Hilfe zu einer bestimmten Funktion. Du drückst F1 und bekommst deine vertraute Delphi Hilfe. Jetzt hättest du natürlich auch gern ein Beispiel zu deren Anwendung oder du fragst dich, ob jemand in der DP schonmal das gleiche Problem damit hatte mit dem du dich gerade herumschlägst. Oder du sehnst dich nach der "alten" Delphi 7 Hilfe. Also musst du die vertraute schützende Umgebung deiner IDE (ja das ist doppelt gemoppelt) verlassen und dich durch die verschiedenen Suchmaschinen und Hilfedateien hangeln.
Hier hilft CustomHelp. Der Assistent fasst deine Suchanfrage in einem niedlichen kleinen Fenster zusammen, von dem aus du in deinen Lieblingssuchmaschinen und Hilfedateien blättern kannst.

Die Features im Überblick ... oder warum sollte ich weiterlesen? (Für alle die lieber Video gucken anstatt zu lesen ... siehe unten. )
  • Suche über F1 (keine ungewöhnlichen Tastenkombinationen)
  • Suche über alle im System registrierten Hx Namespaces (Microsoft Entwicklerhilfe Umgebung) (z.B. Jedi Hilfe)
  • Suche über die Html-Hilfe (*.chm) Dateien
  • Suche über die gute alte Hilfe (*.hlp-Dateien)
  • Suche per Shell-Kommando
  • Suche dynamisch via RSS-Feeds.
  • Einstellungen werden pro Delphi-Version gespeichert
  • Ab Version 1.3 Mit Windows Search die indizierten Dateien durchsuchen
  • Ab Version 2.0 Native Suche in der Google Codesearch
  • Ab Version 2.0 Erweiterbar durch eigene Provider und eigene GUI's (Fenster in dem die Hilfe angezeigt)
  • Ab Version 2.0 Erweiterte Formatierung (Schriftstile + Farbe)
  • Ab Version 2.1 Thread-Unterstützung zur Beschleunigung

Wie (de-)installiere ich CustomHelp?
Am einfachsten ist es über das SVN-Repository von TUO (Wer es ganz heiß mag und die neuesten Neuerungen und Bugs haben will, kann auch den Trunk nehmen). Vermittels eines SVN-Clients ist das überaus einfach. Andernfalls kann man sie die Dateien auch per Browser und Handarbeit runterladen - jeder eben wie er will.
Dann einfach das Package (auf passende Delphi-Version achten) laden und installieren. Fertig. Zum deinstallieren einfach das entsprechende Package aus der Liste der Entwurfs-Packages entfernen. Nach einer eventuellen Deinstallation ist ein Neustart der IDE erforderlich.
Vorher sollte man auf gleiche Weise TUOCommon installieren. (Hier auschecken und installieren)

Alles weitere über die Benutzung erfahrt ihr im Video (siehe unten)

Vorschläge für Hilfe-Provider (bitte die URLs aus den Links kopieren)
Known Issues
  • Unter D2006 darf man das Package nur einmal installieren. Beim zweiten Mal gibts jede Menge Fehler. Als Workaround startet man Delphi nach der Installation einfach neu.
  • CustomHelp bewahrt nicht davor, die Original-Hilfe zu installieren. Leider prüft Delphi bevor es irgendetwas tut, ob diese installiert.

FAQ
  • Gibts das auf deutsch?.... Nein. Das bissl englisch verträgt jeder Entwickler
  • Gibts das als fertige bpl?.... Nein. Der Aufwand fertige Packages aktuell zu halten ist uns zu groß.
  • Kann ich helfen?.... Ja. Wenn du noch Ideen und Anregungen hast?... Immer her damit.
  • Warum habt ihr so wenige Kommentare im Code?.... Diese Projekte sind primär für unseren eigenen Bedarf geschrieben. Wir stellen sie OpenSource zur Verfügung, weil wir selbst gern von OpenSource profitieren. Es ist kein Lehrprojekt . Wenn ihr jedoch Fragen zu dieser oder jener Funktion habt, könnt ihr Marco oder mich gern fragen.
  • Wie kann ich einen eigenen Provider schreiben? .... CustomHelp2 requiren, Ich2Provider implementieren und bei ch2Main registrieren.
  • Wie kann ich eine eigene GUI schreiben? .... CustomHelp2 requiren, Ich2GUI implementieren und bei ch2Main registrieren.

Danke an ...
  • RWarnecke fürs XE2-Projekt
  • HeikoAdams fürs Debuggen und Testen
  • allen anderen für das Feedback

Viel Spaß damit.
wünschen Marco und Benny

Videos
Version 2.0
Version 1.2
Version 1.0
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)

Geändert von chaosben (26. Jul 2012 um 06:52 Uhr) Grund: Release 2.1
 
Benutzerbild von MarcoWarm
MarcoWarm

 
Delphi 10.1 Berlin Professional
 
#21
  Alt 5. Okt 2009, 14:36
Danke... ich schau es mal durch
Marco Warm
  Mit Zitat antworten Zitat
a-s-z-work

 
RAD-Studio 2009 Ent
 
#22
  Alt 6. Okt 2009, 18:18
Hi,

weisst du zufällig, wie ich aus einer ms-help url die Topic-Infos heraus bekomme?

Das Standard-Hilfe-System liefert noch weitere Treffer, die man auch noch anzeigen könnte.

Es gibt ja das Interface IHxTopic das alles nötige liefert, aber wie komme ich an eine Instanz mittels ms-help://embarcadero.rs2009/...?
Andre
  Mit Zitat antworten Zitat
Benutzerbild von MarcoWarm
MarcoWarm

 
Delphi 10.1 Berlin Professional
 
#23
  Alt 7. Okt 2009, 08:49
Hi,

es gibt die Möglichkeit eine Volltextsuche im IHxSession durchführen IHxSession.Query entweder im kompletten Artikeltext mittels des NavDataMonikers '!DefaultFullTextSearch' oder nur in den Keywords mittels '!DefaultKeywordIndex' . Ersteres ist bereits eingebaut... letzteres bringt manchmal weniger Resultate als das suchen über den Slot.
Marco Warm
  Mit Zitat antworten Zitat
Benutzerbild von MarcoWarm
MarcoWarm

 
Delphi 10.1 Berlin Professional
 
#24
  Alt 7. Okt 2009, 11:38
Neues Feature:

Da ab RADStudio 2007 die führenden Namespaces im Suchbegriff enthalten sind (z.B. Unitnamen und Klassennamen) gibt es jetzt die Möglichkeit diese vor der Suche abschneiden zu lassen. Entweder nur den ersten oder alle
Marco Warm
  Mit Zitat antworten Zitat
a-s-z-work

 
RAD-Studio 2009 Ent
 
#25
  Alt 7. Okt 2009, 17:18
Hi Marco,
Zitat von MarcoWarm:
es gibt die Möglichkeit eine Volltextsuche im IHxSession durchführen IHxSession.Query entweder im kompletten Artikeltext mittels des NavDataMonikers '!DefaultFullTextSearch' oder nur in den Keywords mittels '!DefaultKeywordIndex' . Ersteres ist bereits eingebaut... letzteres bringt manchmal weniger Resultate als das suchen über den Slot.
ich habe in der Zwischenzeit noch viel ausprobiert. Die Dokumentation zu den Schnittstellen des Hilfesystems ist ja leider sehr spärlich
Nach langem Rumprobieren und Studieren des Quellcodes der HelpIntf.pas habe ich viel hinbekommen:
  • Das Standard-Hilfesystem funktioniert nicht richtig, wenn ein anderer HelpSelector aktiv ist. Aufrufe an ms-help-URLs gehen ins leere, weil die Implementierung nicht die spezialisierte Methode IExtendedHelpViewer.DisplayTopic aufgerufen wird. Das wird durch CustomHelp behoben.
  • Das Durchreichen von Ergebnissen aus anderen Hilfe-Providern ist jetzt möglich. madExcept hat z.B. auch einen ICustomHelpViewer der die Hilfeseiten im IE aufruft.
  • Insbesondere können dadurch Fundstellen der MSHelp2 von anderen Providern durchgereicht werden. Das RAD Studio findet ja irgendwie doch mehr Ergebnisse, als die reine Schlüsselwortsuche
    Das größte Problem war dabei die Ermittlung des Titels und der Beschreibung eines Topics anhand der URL, damit das Ganze in der Suchübersicht auch vernünftig aussieht. Da gibt es leider keine direkte Funktion in den MSHelp2-Interfaces Durch intensives Debugging habe ich aber einen Weg gefunden 8) Man muss sich das Interface IHxHierarchy analog zu dem Index besorgen. Da kann man dann die Funktion GetSyncInfo verwenden, um an das Topic (IHxTopic) mit allen benötigten Informationen heranzukommen.
    Ohne vernünftige Dokumentation ist das ziemlich mühsam, das alles herauszufinden


Anbei gibt es den Patch für die aktuelle Revision (R343). Ich würde mich freuen, wenn man das in CustomHelp übernehmen würde.

Nachfolgend die Änderungen/Erweiterungen im Einzelnen:
  • Vollständiges Durchreichen der anderen Hilfe-Provider (ICustomHelpViewer, z.B. madExcept, BDS Standardsuche)
  • Anzeige der Standard-Suchergebnisse des BDS.
  • Möglichkeit zum Ermitteln von Titel und Beschreibung von MSHelp2-URLs.
  • Möglichkeit zum Umleiten von beliebigen Protokollen (z.B. file://, http://) auf die Willkommens-Seite.
  • Verallgemeinerung der Pfade in der Projektdatei ($BDS), $(BDSCOMMONDIR)
  • Debuggen der IDE in der IDE durch Verwendung der Option -r, damit sich die IDE-Instanzen nicht in die Quere kommen.
  • Verlagerung einiger Funktion aus TMyViewer in TCustomHelp, teilw. Umwandlung in Klassenmethoden
  • Verbesserung des Verhaltens, wenn das Package wieder entladen wird (HelpSelector wird dann ungültig).
  • Neuer Standard-Suchprovider: MSDN Online
  • Verbessertes Fehlerverhalten bei "kaputten" Namespaces (Alle Fehler werden in der Übersicht angezeigt).
  • Layoutverbesserung in der Ergebnisanzeige: Nur 1/3 der Breite für die Beschreibung.
  • Usability: Der erste Eintrag in den Suchergebnissen wird automatisch selektiert.
Angehängte Dateien
Dateityp: txt customhelp-rev343-20091007.patch_103.txt (64,2 KB, 9x aufgerufen)
Andre
  Mit Zitat antworten Zitat
Benutzerbild von MarcoWarm
MarcoWarm

 
Delphi 10.1 Berlin Professional
 
#26
  Alt 8. Okt 2009, 07:55
Wow ... da hast du dir ja ne Menge Arbeit gemacht.

Leider hab ich im Moment keine Zeit mich um die Änderungen zu kümmern, da Custom Help eher ein Teilzeitprojekt ist.
Ich hab den letzten Patch ausprobiert und hab noch einige "issues" gefunden.
  • Unter BDS2006 kommt eine Schutzverletzung nach dem ersten Hilfeaufruf...da hilf nur noch IDE Neustart. Der Aufrufstack der IDE hilft nicht wirklich weiter. Es passiert bei ValidateHelpSystem (unter BDS2006) im RAD Studio 2009 ist alles ok.
  • Die Einstellung, ob man die CustomHelp Provider am Anfang oder am Ende sehen möchte sollte wahrscheinlich optional sein. Da hat jeder andere Vorstellungen.
  • In GetHelpStrings->PerformSearch durchsuchst du jeden Hilfenamespace erst mit dem vollen Text und falls in einem(!) etwas gefunden wurde brichst du ab und suchst nicht mit dem verkürzten weiter um evtl. in anderen Namespaces was zu finden. Die vorherige Implementation erschien mir logischer: Jeden Hilfenamespace für sich durchsuchen und prüfen, ob der volle HelpString gefunden wurde und danach gegebenenfalls verkürzen. Danach für den nächsten Hilfenamespace das gleiche machen. usw.
  • Die Redirect Schemes hab ich noch nicht ausprobiert
  • Die Unit uUtils.pas ist nicht BDS2006 konform. Dort einfach PWideChar und Widestring in PChar und Widestring umwandeln. Außerdem gab es noch kein TBytes .
  • Layout und Usability Anpassungen finde ich sehr gelungen

Danke, daß du so viel Mühe und Zeit in das Projekt reinsteckst. Da wir aber hier meistens mit BDS2006 arbeiten werde ich die Änderungen vorerst nicht einpflegen. Debuggen hat nich so viel gebracht, da der Fehler noch vor dem eigentlichen Aufruf unserer Klasse passiert:
Code:
 + $7[51F2A11F]{rtl100.bpl } System.System.@IntfAddRef (Line 17953, "system.pas" + 0) + $7
 + $0[51F26B4B]{rtl100.bpl } System.System.@HandleAnyException (Line 9980, "system.pas" + 13) + $0
 + $273[770A45C2]{ntdll.dll  } RtlpEnsureBufferSize + $273
 + $A[7707E49A]{ntdll.dll  } KiUserExceptionDispatcher + $A
 + $14[20B73F74]{coreide100.bpl} CompHelp.CompHelp.ValidateHelpSystem (Line 101, "CompHelp.pas" + 8) + $14
 + $E[20B940D6]{coreide100.bpl} EditorControl.EditorControl.TCustomEditControl.HelpKeyword (Line 4451, "EditorControl.pas" + 41) + $E
 + $0[20B99E84]{coreide100.bpl} EditorControl.EditorControl.TEditControl.CMControlCommand (Line 7255, "EditorControl.pas" + 2) + $0
 + $6[5205CA19]{vcl100.bpl } Controls.Controls.TWinControl.WndProc (Line 7246, "Controls.pas" + 105) + $6
 + $6[5205C1A4]{vcl100.bpl } Controls.Controls.TWinControl.MainWndProc (Line 7021, "Controls.pas" + 3) + $6
 + $0[51F60BC0]{rtl100.bpl } Classes.Classes.StdWndProc (Line 11572, "classes.pas" + 8) + $0
 + $24D[75288814]{USER32.dll } GetWindowLongW + $24D
 + $3C2[75288989]{USER32.dll } GetWindowLongW + $3C2
 + $7F[75289D0F]{USER32.dll } PostMessageW + $7F
 + $F2[75289D82]{USER32.dll } PostMessageW + $F2
 + $2B[7707E473]{ntdll.dll  } KiUserCallbackDispatcher + $2B
 + $47[7528F1B8]{USER32.dll } SendMessageA + $47
 + $10[20B84A6E]{coreide100.bpl} VClient.VClient.SendWindowMsg (Line 2673, "VClient.pas" + 2) + $10
 + $5[20B4A2BE]{coreide100.bpl} IDEKbd.IDEKbd.@interpret_bmi_macro$qqrp5BMI_tpcp11CmdMapTableppc (Line 39, "bmi.cpp" + 14) + $5
 + $16E[20B48ED2]{coreide100.bpl} IDEKbd.IDEKbd... (Line 586, "IDEKbd.pas" + 0) + $16E
 + $17[20B821A4]{coreide100.bpl} VClient.VClient.CmdStringProc (Line 504, "VClient.pas" + 5) + $17
 + $11[20C15B3C]{coreide100.bpl} KbClient.KbClient.TIDEKBDFrameAPI.MapAndEvalInternal (Line 832, "KbClient.pas" + 10) + $11
 + $12[20C155C1]{coreide100.bpl} KbClient.KbClient.HandleKey (Line 562, "KbClient.pas" + 6) + $12
 + $1[20C158D1]{coreide100.bpl} KbClient.KbClient.TIDEKBDFrameAPI.ProcessKeyStroke (Line 713, "KbClient.pas" + 141) + $1
 + $16[20C16604]{coreide100.bpl} KbClient.KbClient.TIDEKBDChildAPI.ProcessKeyStroke (Line 1357, "KbClient.pas" + 14) + $16
 + $18[20B98BC0]{coreide100.bpl} EditorControl.EditorControl.TCustomEditControl.DoKeyDown (Line 6843, "EditorControl.pas" + 6) + $18
 + $6[5205CA19]{vcl100.bpl } Controls.Controls.TWinControl.WndProc (Line 7246, "Controls.pas" + 105) + $6
 + $6[5205C1A4]{vcl100.bpl } Controls.Controls.TWinControl.MainWndProc (Line 7021, "Controls.pas" + 3) + $6
 + $0[51F60BC0]{rtl100.bpl } Classes.Classes.StdWndProc (Line 11572, "classes.pas" + 8) + $0
 + $24D[75288814]{USER32.dll } GetWindowLongW + $24D
 + $3C2[75288989]{USER32.dll } GetWindowLongW + $3C2
 + $7F[75289D0F]{USER32.dll } PostMessageW + $7F
 + $F2[75289D82]{USER32.dll } PostMessageW + $F2
 + $2B[7707E473]{ntdll.dll  } KiUserCallbackDispatcher + $2B
 + $47[7528C362]{USER32.dll } SendMessageW + $47
Ich denke das liegt an dem Punkt
Zitat von a-s-z-work:
  • Verbesserung des Verhaltens, wenn das Package wieder entladen wird (HelpSelector wird dann ungültig).
Aber ich konnte nicht rausfinden, was du dahingehend gemacht hast. Wenn du das nochmal rückgängig machen könntest und dann nochmal ein Patch machst, dann kann ich mich auch um die anderen angesprochenen Punkte kümmern

Es gibt noch eine neue Revision (wegen eines kleinen Bugs bei der Neuanlage von Custom Help Providern). Wenn ich noch irgendwas für dich tun kann sags einfach. Sorry, daß ich deine vorherige Frage völlig unsinnig beantwortet habe. Im moment ist arbeitstechnisch ne Menge los und da bleibt die Konzentration ein wenig auf der Strecke.
Marco Warm
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

 
Delphi XE2 Professional
 
#27
  Alt 8. Okt 2009, 11:23
Noch schnell was "Neues": Im ersten Post gibts einen Link zu einem neuen Video, das die Installation und ein paar Möglichkeiten vorführt.
Benjamin Schwarze
  Mit Zitat antworten Zitat
a-s-z-work

 
RAD-Studio 2009 Ent
 
#28
  Alt 8. Okt 2009, 11:50
Hallo Marco,

Zitat von MarcoWarm:
Wow ... da hast du dir ja ne Menge Arbeit gemacht.
Leider hab ich im Moment keine Zeit mich um die Änderungen zu kümmern, da Custom Help eher ein Teilzeitprojekt ist.
Ich hab den letzten Patch ausprobiert und hab noch einige "issues" gefunden.
  • Unter BDS2006 kommt eine Schutzverletzung nach dem ersten Hilfeaufruf...da hilf nur noch IDE Neustart. Der Aufrufstack der IDE hilft nicht wirklich weiter. Es passiert bei ValidateHelpSystem (unter BDS2006) im RAD Studio 2009 ist alles ok.
  • Das Problem kenne ich auch aus Delphi 2009. Der Zeitpunkt zu dem der Selector registriert wird scheint einigermassen kritisch zu sein. Ich hab es mal im Create-Event versucht, aber da hat es bei D2009 nix gebracht ;(

    Zitat von MarcoWarm:
  • Die Einstellung, ob man die CustomHelp Provider am Anfang oder am Ende sehen möchte sollte wahrscheinlich optional sein. Da hat jeder andere Vorstellungen.
Kein Problem, das ist nur eine Kleinigkeit.

Zitat von MarcoWarm:
  • In GetHelpStrings->PerformSearch durchsuchst du jeden Hilfenamespace erst mit dem vollen Text und falls in einem(!) etwas gefunden wurde brichst du ab und suchst nicht mit dem verkürzten weiter um evtl. in anderen Namespaces was zu finden. Die vorherige Implementation erschien mir logischer: Jeden Hilfenamespace für sich durchsuchen und prüfen, ob der volle HelpString gefunden wurde und danach gegebenenfalls verkürzen. Danach für den nächsten Hilfenamespace das gleiche machen. usw.
  • Hmm, das entbehrt nicht einer gewissen Logik Ich werde da meine Implementierung entsprechend ändern. Wichtig ist für mich die Fehlerbehandlung bei kaputten Namespaces, da sonst ein kaputter Namespace dazu führt, das gar keine Ergebnisse mehr angezeigt werden.

    Zitat von MarcoWarm:
  • Die Unit uUtils.pas ist nicht BDS2006 konform. Dort einfach PWideChar und Widestring in PChar und Widestring umwandeln. Außerdem gab es noch kein TBytes .
  • Da wird man denke ich am einfachsten was über Conditionals machen, und die fehlenden Sachen für ältere Delphi-Versionen deklarieren.

    Zitat von MarcoWarm:
  • Layout und Usability Anpassungen finde ich sehr gelungen
  • Zitat von MarcoWarm:
    Danke, daß du so viel Mühe und Zeit in das Projekt reinsteckst. Da wir aber hier meistens mit BDS2006 arbeiten werde ich die Änderungen vorerst nicht einpflegen. Debuggen hat nich so viel gebracht, da der Fehler noch vor dem eigentlichen Aufruf unserer Klasse passiert:
    Code:
     + $7[51F2A11F]{rtl100.bpl } System.System.@IntfAddRef (Line 17953, "system.pas" + 0) + $7
     + $0[51F26B4B]{rtl100.bpl } System.System.@HandleAnyException (Line 9980, "system.pas" + 13) + $0
     + $273[770A45C2]{ntdll.dll  } RtlpEnsureBufferSize + $273
     + $A[7707E49A]{ntdll.dll  } KiUserExceptionDispatcher + $A
     + $14[20B73F74]{coreide100.bpl} CompHelp.CompHelp.ValidateHelpSystem (Line 101, "CompHelp.pas" + 8) + $14
     + $E[20B940D6]{coreide100.bpl} EditorControl.EditorControl.TCustomEditControl.HelpKeyword (Line 4451, "EditorControl.pas" + 41) + $E
     + $0[20B99E84]{coreide100.bpl} EditorControl.EditorControl.TEditControl.CMControlCommand (Line 7255, "EditorControl.pas" + 2) + $0
     + $6[5205CA19]{vcl100.bpl } Controls.Controls.TWinControl.WndProc (Line 7246, "Controls.pas" + 105) + $6
     + $6[5205C1A4]{vcl100.bpl } Controls.Controls.TWinControl.MainWndProc (Line 7021, "Controls.pas" + 3) + $6
     + $0[51F60BC0]{rtl100.bpl } Classes.Classes.StdWndProc (Line 11572, "classes.pas" + 8) + $0
     + $24D[75288814]{USER32.dll } GetWindowLongW + $24D
     + $3C2[75288989]{USER32.dll } GetWindowLongW + $3C2
     + $7F[75289D0F]{USER32.dll } PostMessageW + $7F
     + $F2[75289D82]{USER32.dll } PostMessageW + $F2
     + $2B[7707E473]{ntdll.dll  } KiUserCallbackDispatcher + $2B
     + $47[7528F1B8]{USER32.dll } SendMessageA + $47
     + $10[20B84A6E]{coreide100.bpl} VClient.VClient.SendWindowMsg (Line 2673, "VClient.pas" + 2) + $10
     + $5[20B4A2BE]{coreide100.bpl} IDEKbd.IDEKbd.@interpret_bmi_macro$qqrp5BMI_tpcp11CmdMapTableppc (Line 39, "bmi.cpp" + 14) + $5
     + $16E[20B48ED2]{coreide100.bpl} IDEKbd.IDEKbd... (Line 586, "IDEKbd.pas" + 0) + $16E
     + $17[20B821A4]{coreide100.bpl} VClient.VClient.CmdStringProc (Line 504, "VClient.pas" + 5) + $17
     + $11[20C15B3C]{coreide100.bpl} KbClient.KbClient.TIDEKBDFrameAPI.MapAndEvalInternal (Line 832, "KbClient.pas" + 10) + $11
     + $12[20C155C1]{coreide100.bpl} KbClient.KbClient.HandleKey (Line 562, "KbClient.pas" + 6) + $12
     + $1[20C158D1]{coreide100.bpl} KbClient.KbClient.TIDEKBDFrameAPI.ProcessKeyStroke (Line 713, "KbClient.pas" + 141) + $1
     + $16[20C16604]{coreide100.bpl} KbClient.KbClient.TIDEKBDChildAPI.ProcessKeyStroke (Line 1357, "KbClient.pas" + 14) + $16
     + $18[20B98BC0]{coreide100.bpl} EditorControl.EditorControl.TCustomEditControl.DoKeyDown (Line 6843, "EditorControl.pas" + 6) + $18
     + $6[5205CA19]{vcl100.bpl } Controls.Controls.TWinControl.WndProc (Line 7246, "Controls.pas" + 105) + $6
     + $6[5205C1A4]{vcl100.bpl } Controls.Controls.TWinControl.MainWndProc (Line 7021, "Controls.pas" + 3) + $6
     + $0[51F60BC0]{rtl100.bpl } Classes.Classes.StdWndProc (Line 11572, "classes.pas" + 8) + $0
     + $24D[75288814]{USER32.dll } GetWindowLongW + $24D
     + $3C2[75288989]{USER32.dll } GetWindowLongW + $3C2
     + $7F[75289D0F]{USER32.dll } PostMessageW + $7F
     + $F2[75289D82]{USER32.dll } PostMessageW + $F2
     + $2B[7707E473]{ntdll.dll  } KiUserCallbackDispatcher + $2B
     + $47[7528C362]{USER32.dll } SendMessageW + $47
    Ich denke das liegt an dem Punkt
    Zitat von a-s-z-work:
    • Verbesserung des Verhaltens, wenn das Package wieder entladen wird (HelpSelector wird dann ungültig).
    Aber ich konnte nicht rausfinden, was du dahingehend gemacht hast. Wenn du das nochmal rückgängig machen könntest und dann nochmal ein Patch machst, dann kann ich mich auch um die anderen angesprochenen Punkte kümmern
    Wie schon gesagt, der Fehler tritt teilweise auch unter D2009 auf, allerdings funktioniert nur der erste Aufruf nicht. Anschließende Aufrufe verursachen keine Probleme mehr. Außerdem gibt es das Problem nur, wenn ich das Package neu lade. Wird das Package schon beim Programmstart geladen, gibt es keine Probleme.
    Zum Debuggen solltest du auf jeden Fall Breakpoints in deinem Code aktivieren, um zu schauen, ob der Code aufgerufen wird. Meistens sind diese Exceptions nämlich Folgefehler, weil wir die Dinge nicht so machen, wie das Hilfesystem es erwartet. Na das liegt dann wohl an der äußerst ausführlichen Doku!

    Zu meinen Änderungen:
    Der HelpSelektor wird jetzt nur noch einmal erzeugt, den könnte man aber auch denke ich problemlos wieder jedes Mal erzeugen. Aber registriert wird er immer noch bei jedem Aufruf. In UnderstandsKeyword wird jetzt die echte Anzahl an Ergebnissen übergeben, da könnte man aber auch wieder fest die 1 zurück liefern. Vielleicht kommt da die Suche dem Hilfesystem in die Quere.
    Andre
      Mit Zitat antworten Zitat
    Benutzerbild von MarcoWarm
    MarcoWarm

     
    Delphi 10.1 Berlin Professional
     
    #29
      Alt 8. Okt 2009, 12:05
    Hallo Andre,

    Zitat von a-s-z-work:
    Wie schon gesagt, der Fehler tritt teilweise auch unter D2009 auf, allerdings funktioniert nur der erste Aufruf nicht. Anschließende Aufrufe verursachen keine Probleme mehr. Außerdem gibt es das Problem nur, wenn ich das Package neu lade. Wird das Package schon beim Programmstart geladen, gibt es keine Probleme.
    Zum Debuggen solltest du auf jeden Fall Breakpoints in deinem Code aktivieren, um zu schauen, ob der Code aufgerufen wird. Meistens sind diese Exceptions nämlich Folgefehler, weil wir die Dinge nicht so machen, wie das Hilfesystem es erwartet. Na das liegt dann wohl an der äußerst ausführlichen Doku!

    Zu meinen Änderungen:
    Der HelpSelektor wird jetzt nur noch einmal erzeugt, den könnte man aber auch denke ich problemlos wieder jedes Mal erzeugen. Aber registriert wird er immer noch bei jedem Aufruf. In UnderstandsKeyword wird jetzt die echte Anzahl an Ergebnissen übergeben, da könnte man aber auch wieder fest die 1 zurück liefern. Vielleicht kommt da die Suche dem Hilfesystem in die Quere.
    Dieser Fehler unter D2009 ist mir auch bekannt. Den HelpSelector hatte ich bewusst jedes mal neu erzeugt, da ich sonst die Schutzverletzung bekam.
    Übringens: Breakpoints und deren Anwendung sind mir vertraut (nichts für ungut)
    Die Exception tritt eben schon auf bevor ich irgendwas in meinen Klassen mache.

    Ob understandskeyword die reale Resultatmenge zurückgibt ist dem Hilfesystem völlig egal... dort wird nur geprüft:
    vFound := vViewer.UnderstandsKeyword(HelpKeyword) > 0;
    Marco Warm
      Mit Zitat antworten Zitat
    a-s-z-work

     
    RAD-Studio 2009 Ent
     
    #30
      Alt 8. Okt 2009, 12:39
    Hallo Marco,

    Zitat von MarcoWarm:
    Dieser Fehler unter D2009 ist mir auch bekannt. Den HelpSelector hatte ich bewusst jedes mal neu erzeugt, da ich sonst die Schutzverletzung bekam.
    Na da haben wir ja vielleicht schon das Problem mit dem BDS2006 gefunden?

    Zitat von MarcoWarm:
    Übringens: Breakpoints und deren Anwendung sind mir vertraut (nichts für ungut)
    Die Exception tritt eben schon auf bevor ich irgendwas in meinen Klassen mache.
    Das mit den Breakpoints usw. habe ich auch nicht anders erwartet. Bei mir war z.B. das Problem, das der Fehler später aufgetreten ist, wenn ich im Konstruktor AssignHelpSelector verwendet habe. Da wurden vor der Exception außerdem Methoden aufgerufen, die ich nicht vermutet hatte. Vielleicht werden da Seiteneffekte erzeugt. Und die konkrete Implementierung des BDS-Hilfesystems kann ja nicht einsehen ...

    Zitat von MarcoWarm:
    Ob understandskeyword die reale Resultatmenge zurückgibt ist dem Hilfesystem völlig egal... dort wird nur geprüft:
    vFound := vViewer.UnderstandsKeyword(HelpKeyword) > 0;
    Ja, zumindest der aktuellen Implementierung
    Andre
      Mit Zitat antworten Zitat
    Antwort Antwort
    Seite 3 von 13     123 45     Letzte »    


    Forumregeln

    Es ist dir nicht erlaubt, neue Themen zu verfassen.
    Es ist dir nicht erlaubt, auf Beiträge zu antworten.
    Es ist dir nicht erlaubt, Anhänge hochzuladen.
    Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

    BB-Code ist an.
    Smileys sind an.
    [IMG] Code ist an.
    HTML-Code ist aus.
    Trackbacks are an
    Pingbacks are an
    Refbacks are aus

    Gehe zu:

    Impressum · AGB · Datenschutz · Nach oben
    Alle Zeitangaben in WEZ +1. Es ist jetzt 15:14 Uhr.
    Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
    LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
    Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz