Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: VCL (C++ Builder) ::  RAD Studio 10.1 Berlin: eigene Schlüsselwörter für Syntax-Hilighting     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
DocShoe
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.04.2008
Beiträge: 2647
Beitrag DocShoe Mitglied 11:54:05 08.11.2016   Titel:   RAD Studio 10.1 Berlin: eigene Schlüsselwörter für Syntax-Hilighting            Zitieren

Hallo,

ich habe einige eigene cast Funktionen, die umständliche cast-Kaskaden vereinfachen. Die würde ich im Quelltext gern hervorheben, damit man sie sofort als casts erkennt. Gibt es im Studio eine Möglichkeit, eigene Schlüsselwörter für das Syntax-Hilighting zu definieren?

_________________
Die fünf häufigsten Anzeichen für Faulheit:
1.
Burkhi
Mitglied

Benutzerprofil
Anmeldungsdatum: 12.11.2003
Beiträge: 700
Beitrag Burkhi Mitglied 19:26:53 09.11.2016   Titel:              Zitieren

Vlt. hilft dir das weiter:
http://users.telenet.be/ws36637/delphisyntax.html

_________________
Objekt- Orientierte Automatisierungs- Software- Entwicklung
Rad Studio: 10.2 Tokyo, 10.1 Berlin, 10 Seattle, XE8, XE7, XE6, XE5, XE2, XE, 2010, 2009
C++ Builder: XE4, XE3, 2006, 5 Prof
DocShoe
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.04.2008
Beiträge: 2647
Beitrag DocShoe Mitglied 15:36:35 14.11.2016   Titel:              Zitieren

Danke Burkhi, ich habe mir den Link mal angeguckt und erste Schritt gemacht. Leider ohne Erfolg, und der Compiler will mir auch nicht sagen, was er nicht mag. In einem Spielprojekt möchte ich erst ein Mal nur testen, ob sich der Wizard in der IDE registrieren lässt, tun soll er vorerst nichts. Leider lässt sich das Programm nicht übersetzen, der Compiler meldet lapidar
Compiler schrieb:
C++ Fehler HighlightWizard.cpp(97): E2352 Instanz der abstrakten Klasse 'CustomHighlighter' kann nicht erzeugt werden

Das ist alles. Kein Name einer nicht-implementierten Methode, nix.

Komischerweise muss ich auch alle in NotifierObject implementierten Methoden in der Klasse CustomHighlighter per using bekannt machen, sonst meldet der Compiler, dass BeforeSave, AfterSave, Modified und Destroyed nicht implementiert seien. Merkwürdig, da CustomHighlighter von NotifierObject public erbt und in NotifierObject alle Methoden implemntiert sind. Bestimmt wieder so eine Delphi Eigenart...

Und nun zur Frage:
Was mache ich falsch? Warum kann ich von CustomHighlighter kein Instanz erzeugen und was muss ich tun, damit´s geht? Im Moment teste ich das noch unter dem Codegear RAD Studio 2007.

.h Datei
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#ifndef HighlightWizardH
#define HighlightWizardH

#include <Windows.h>

#include <SysUtils.hpp>
#include <ToolsAPI.hpp>
#include <Dialogs.hpp>

#include <string>

 
class NotifierObject : public IOTANotifier
{
    LONG RefCount_;
 
public:
    __fastcall NotifierObject();
    __fastcall virtual ~NotifierObject();
 
   void __fastcall  BeforeSave();
   void __fastcall  AfterSave();
   void __fastcall  Destroyed();
   void __fastcall  Modified();
 
protected:
    HRESULT __stdcall QueryInterface( const GUID& iid, void** obj );
   ULONG   __stdcall AddRef();
   ULONG   __stdcall Release();
};
 
class CustomHighlighter :
   public virtual NotifierObject,
    public virtual IOTAWizard,
    public virtual IOTAHighlighter
{
public:
    __fastcall CustomHighlighter();
 
   using NotifierObject::AfterSave;
   using NotifierObject::BeforeSave;
   using NotifierObject::Modified;
   using NotifierObject::Destroyed;
   using NotifierObject::QueryInterface;
   using NotifierObject::AddRef;
   using NotifierObject::Release;
 
    // IOTAWizard Interface
   void             __fastcall Execute();
 
    // IOTAHighlighter Interface
    AnsiString      __fastcall GetIDString();
   AnsiString       __fastcall GetName();
   TWizardState   __fastcall GetState();
 
    void                __fastcall Tokenize( unsigned char StartClass, char* LineBuf, unsigned short LineBufLen, unsigned char* HighlightCodes );
    unsigned char   __fastcall TokenizeLineClass( unsigned char StartClass, char * LineBuf, unsigned short LineBufLen );
};
 
void __fastcall Register();

#endif


.cpp Datei:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#pragma hdrstop

#include "HighlightWizard.h"

 
__fastcall NotifierObject::NotifierObject() :
    RefCount_( 0 )
{
}
 
__fastcall NotifierObject::~NotifierObject()
{
}
 
void __fastcall NotifierObject::AfterSave()
{
}
 
void __fastcall NotifierObject::BeforeSave()
{
}
 
void __fastcall NotifierObject::Destroyed()
{
}
 
void __fastcall NotifierObject::Modified()
{
}
 
HRESULT __stdcall NotifierObject::QueryInterface( const GUID& iid, void** obj )
{
    if( iid == __uuidof( IInterface) )
   {
        *obj = static_cast<IInterface*>( this );
        static_cast<IInterface*>( *obj )->AddRef();
        return S_OK;
    }
    else if( iid == __uuidof(IOTANotifier) )
   {
        *obj = static_cast<IOTANotifier*>( this );
        static_cast<IOTANotifier*>( *obj )->AddRef();
        return S_OK;
    }
    return E_NOINTERFACE;
}
 
ULONG __stdcall NotifierObject::AddRef()
{
    return ::InterlockedIncrement( &RefCount_ );
}
 
ULONG __stdcall NotifierObject::Release()
{
    ULONG Result = ::InterlockedDecrement( &RefCount_ );
    if( RefCount_ == 0 ) delete this;
    return Result;
}
 
 
 
__fastcall CustomHighlighter::CustomHighlighter()
{
}
 
void __fastcall CustomHighlighter::Execute()
{
}
 
AnsiString __fastcall CustomHighlighter::GetIDString()
{
    return "ocs.CustomHighlightWizard";
}
 
AnsiString __fastcall CustomHighlighter::GetName()
{
    return "OCS Custom Highlight Wizard";
}
 
TWizardState __fastcall CustomHighlighter::GetState()
{
    TWizardState State;
   State << wsEnabled;
    return State;
}
 
void __fastcall CustomHighlighter::Tokenize( unsigned char StartClass, char* LineBuf, unsigned short LineBufLen, unsigned char* HighlightCodes )
{
}
 
unsigned char __fastcall CustomHighlighter::TokenizeLineClass( unsigned char StartClass, char * LineBuf, unsigned short LineBufLen )
{
    return 0;
}
 
void __fastcall Register()
{
    RegisterPackageWizard( new CustomHighlighter() );
}

_________________
Die fünf häufigsten Anzeichen für Faulheit:
1.


Zuletzt bearbeitet von DocShoe am 15:56:40 14.11.2016, insgesamt 1-mal bearbeitet
audacia
Mitglied

Benutzerprofil
Anmeldungsdatum: 05.02.2005
Beiträge: 4691
Beitrag audacia Mitglied 16:10:10 14.11.2016   Titel:              Zitieren

Mach dir doch das Leben leichter und schreibe den Wizard in Delphi. C++ macht es hier nur komplizierter.


DocShoe schrieb:
Leider lässt sich das Programm nicht übersetzen, der Compiler meldet lapidar
Compiler schrieb:
C++ Fehler HighlightWizard.cpp(97): E2352 Instanz der abstrakten Klasse 'CustomHighlighter' kann nicht erzeugt werden

Das ist alles. Kein Name einer nicht-implementierten Methode, nix.
Hast du in den Projektoptionen die Option "Erweiterte Fehlerinfos" aktiviert? Dann sollte der Compiler mehr Details ausspucken.

_________________
"Hey, it compiles! Ship it!"
C++Builder Pages · Typsichere Format-Strings
DocShoe
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.04.2008
Beiträge: 2647
Beitrag DocShoe Mitglied 16:26:26 14.11.2016   Titel:              Zitieren

Hallo audacia,

ja, Erweiterte Fehlerinformationen sind aktiviert. Ich kann kein Delphi, ich kann rudimentär erkennen, was Delphi Code macht, aber schreiben kann ich´s nicht.

_________________
Die fünf häufigsten Anzeichen für Faulheit:
1.
Burkhi
Mitglied

Benutzerprofil
Anmeldungsdatum: 12.11.2003
Beiträge: 700
Beitrag Burkhi Mitglied 14:12:45 16.11.2016   Titel:              Zitieren

DocShoe schrieb:
... Ich kann kein Delphi, ich kann rudimentär erkennen, was Delphi Code macht, aber schreiben kann ich´s nicht.


Vlt. wäre das ja jetzt ein Anreiz für dich, sich noch Delphi Kenntnisse anzueignen. ;) ;)

_________________
Objekt- Orientierte Automatisierungs- Software- Entwicklung
Rad Studio: 10.2 Tokyo, 10.1 Berlin, 10 Seattle, XE8, XE7, XE6, XE5, XE2, XE, 2010, 2009
C++ Builder: XE4, XE3, 2006, 5 Prof
C++ Forum :: VCL (C++ Builder) ::  RAD Studio 10.1 Berlin: eigene Schlüsselwörter für Syntax-Hilighting   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.