|
Antwort |
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. )
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
FAQ
Danke an ...
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 |
RAD-Studio 2009 Ent |
#22
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
|
Zitat |
Delphi 10.1 Berlin Professional |
#23
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
|
Zitat |
Delphi 10.1 Berlin Professional |
#24
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
|
Zitat |
RAD-Studio 2009 Ent |
#25
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.
Nach langem Rumprobieren und Studieren des Quellcodes der HelpIntf.pas habe ich viel hinbekommen:
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:
Andre
|
Zitat |
Delphi 10.1 Berlin Professional |
#26
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.
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:
Ich denke das liegt an dem Punkt
+ $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
Zitat von a-s-z-work:
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
|
Zitat |
Delphi XE2 Professional |
#27
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
|
Zitat |
RAD-Studio 2009 Ent |
#28
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.
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:
Ich denke das liegt an dem Punkt
+ $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
Zitat von a-s-z-work:
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
|
Zitat |
Delphi 10.1 Berlin Professional |
#29
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. Ü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
|
Zitat |
RAD-Studio 2009 Ent |
#30
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.
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.
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;
Andre
|
Zitat |
Ansicht |
Linear-Darstellung |
Zur Hybrid-Darstellung wechseln |
Zur Baum-Darstellung wechseln |
ForumregelnEs 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
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
LinkBack URL |
About LinkBacks |