delphi code umwandeln in BCB code
-
Hallo kann mir vielleicht einer dabei helfen?
Was mach ich hier falsch?Delphi code:
private FDoChangeEvents: Boolean; FFileName: String; FModified: Boolean; HistoryList : TStringList; procedure PopulateHistoryMenu; procedure LoadIniSettings; procedure SaveIniSettings; procedure SetDoChangeEvents(const Value: Boolean); procedure SetFileName(const Value: String); procedure SetModified(const Value: Boolean); { Private declarations } public { Public declarations } property Modified : Boolean read FModified write SetModified; property FileName : String read FFileName write SetFileName; procedure DrawXML( Data : Pointer = nil ); function DrawXMLItem( XMLItem : TXMLItem; Node : TTreeNode; Data : Pointer ) : Pointer; property DoChangeEvents : Boolean read FDoChangeEvents write SetDoChangeEvents; end; procedure TfrmMain.DrawXML( Data : Pointer = nil ); var p : Pointer; begin p := Data; if (tvXML.Selected <> nil) and (p = nil) then p := tvXML.Selected.Data; tvXML.Items.Clear; p := DrawXMLItem(XML.Root, nil, p); tvXML.FullExpand; if p = nil then tvXML.Selected := tvXML.Items[0] else tvXML.Selected := p; end; function TfrmMain.DrawXMLItem(XMLItem: TXMLItem; Node: TTreeNode; Data : Pointer) : Pointer; var n : TTreeNode; i : Integer; p : Pointer; begin Result := nil; p := nil; n := tvXML.Items.AddChild(Node, XMLItem.Name); n.Data := XMLItem; if Integer(n.Data) = Integer(Data) then p := n; for i := 0 to XMLItem.SubItemCount -1 do if p = nil then p := DrawXMLItem(XMLItem.SubItems[i], n, Data) else DrawXMLItem(XMLItem.SubItems[i], n, Data); if p <> nil then Result := p; end;Übersetzt in BCB
Unit1.hprivate: // Anwender-Deklarationen AnsiString FileName; bool Modified; public: // Anwender-Deklarationen void __fastcall DrawXML( void * Data = NULL ); //nil=Null void __fastcall DrawXMLItem ( TXMLItem * XMLItem , TTreeNode * Node , void * Data ); __fastcall TForm1(TComponent* Owner);Unit1.cpp
void __fastcall TForm1::DrawXML( void * Data ) { void * p; p = Data; if (tvXML->Selected == NULL && p ==NULL) { p = tvXML->Selected->Data; //tvXML = TreeView } tvXML->Items->Clear(); p = DrawXMLItem(XML->Root, NULL, p); tvXML->FullExpand(); if (p = NULL) { tvXML->Selected = tvXML->Items[0] ; } else { tvXML->Selected = p; } } //--------------------------------------------------------------------------- void __fastcall TForm1::DrawXMLItem( TXMLItem * XMLItem , TTreeNode * Node , void * Data ) { TTreeNode * n; int i; void * p; Result = NULL; p = NULL; n = tvXML->Items->AddChild(Node, XMLItem->Name); n->Data = XMLItem; if Integer(n->Data) = int(Data) then p = n; for (i=0;i<XMLItemSubItemCount-1;i++') if( p == NULL) { p = DrawXMLItem(XMLItem.SubItems[i], n, Data) } else { DrawXMLItem(XMLItem->SubItems[i], n, Data); } if (p == NULL) { Result = p; } }Vorab schonmal danke
Gruss Lisa
-
Was mach ich hier falsch?
Keine Ahnung, was geht denn nicht?
Wie sollte dir jemand helfen? Was sollte man mit deinen Codefragmenten tun? Wo sollte man sie einfügen??
Irgendwie wäre so ein Hinweis auf Compiler oder Linkermeldungen hilfreich, die Zeilennummer wo es Probleme gibt usw.
-
zum einen möchte ich gerne wissen ob ich die Codezeilen richtig übersetzt habe
und dann tauchen beim compilieren immer wieder fehler auf
z.B.p = DrawXMLItem(XML->Root, NULL, p);[C++ Fehler] Unit1.cpp(27): E2109 Kein zulässiger Typ
if (p = NULL) { tvXML->Selected = tvXML->Items[0] ; } else { tvXML->Selected = p; }[C++ Fehler] Unit1.cpp(32): E2034 Konvertierungvon 'TTreeNodes'nach 'TTreeNode *' nicht möglich
[C++ Fehler] Unit1.cpp(36): E2034 Konvertierung von 'void *' nach 'TTreeNode *' nicht möglichgruss lisa
-
Die Fehlermeldung besagt, dass ein Zeiger erwartet wird und XML->Root offenbar keiner ist. Des Weiteren wird der Funktion DrawXMLItem die als 2. Parameter ebenfalls einen Zeiger vom Typ 'TTreeNode * erwartet ein void übergeben. Hier könnte ein casten helfen
-
wie würdet ihr denn diesen code übersetzen?
private FDoChangeEvents: Boolean; FFileName: String; FModified: Boolean; HistoryList : TStringList; procedure PopulateHistoryMenu; procedure LoadIniSettings; procedure SaveIniSettings; procedure SetDoChangeEvents(const Value: Boolean); procedure SetFileName(const Value: String); procedure SetModified(const Value: Boolean); { Private declarations } public { Public declarations } property Modified : Boolean read FModified write SetModified; property FileName : String read FFileName write SetFileName; procedure DrawXML( Data : Pointer = nil ); function DrawXMLItem( XMLItem : TXMLItem; Node : TTreeNode; Data : Pointer ) : Pointer; property DoChangeEvents : Boolean read FDoChangeEvents write SetDoChangeEvents; end; //---------------------------------------------------------------------------- procedure TfrmMain.DrawXML( Data : Pointer = nil ); var p : Pointer; begin p := Data; if (tvXML.Selected <> nil) and (p = nil) then p := tvXML.Selected.Data; tvXML.Items.Clear; p := DrawXMLItem(XML.Root, nil, p); tvXML.FullExpand; if p = nil then tvXML.Selected := tvXML.Items[0] else tvXML.Selected := p; end; //------------------------------------------------------------------------ function TfrmMain.DrawXMLItem(XMLItem: TXMLItem; Node: TTreeNode; Data : Pointer) : Pointer; var n : TTreeNode; i : Integer; p : Pointer; begin Result := nil; p := nil; n := tvXML.Items.AddChild(Node, XMLItem.Name); n.Data := XMLItem; if Integer(n.Data) = Integer(Data) then p := n; for i := 0 to XMLItem.SubItemCount -1 do if p = nil then p := DrawXMLItem(XMLItem.SubItems[i], n, Data) else DrawXMLItem(XMLItem.SubItems[i], n, Data); if p <> nil then Result := p; end;
-
Und wozu diesen Code nochmal gepostet? Zeitschleife?
Ich würde ihn gar nicht übersetzen, ich würde
- eine XML Klasse des C++Builders nehmen oder
- die pas-Datei in das Projekt mit aufnehmen und sie dann von dort direkt nutzen
-
Gibt es den keine Möglichkeit diesen Code zu Übersetzen?
Die *.pas mit einzubinden würde ich als letzte Möglichkeit in Betracht ziehen.
Kann mir denn keiner dabei helfen disen Code zu Übersetzen?
Bitte helft mir!!!!Gruß Lisa
-
Sorry, aber man hat ja angefangen -> du postet einfach den Code nochmal
-
Hallo
ich vermute mal so (ich übersetzte quasi Zeile für Zeile, da die Auszüge aus dem Kontext gerissen wurden und keine abschließende Korrektur ermöglichen)
private : bool FDoChangeEvents; AnsiString FFileName; bool FModified; TStringList* HistoryList; // Die Instanz dieser StringList mus irgendwo erstellt und auch wieder gelöscht werden! void PopulateHistoryMenu(); void LoadIniSettings(); void SaveIniSettings(); void SetDoChangeEvents(const bool Value); void SetFileName(const AnsiString& Value); void SetModified(const bool Value); // { Private declarations } public : // { Public declarations } __property bool Modified = {read = FModified, write = SetModified}; __property AnsiString FileName = {read = FFileName, write = SetFileName}; void DrawXML(void* Data = NULL); void* DrawXMLItem(TXMLItem* XMLItem, TTreeNode* Node, void* Data); __property bool DoChangeEvents = {read = FDoChangeEvents, write = SetDoChangeEvents}; }; //---------------------------------------------------------------------------- void TfrmMain::DrawXML(void* Data); { void* p = Data; if ((tvXML->Selected) && (!p)) p = tvXML->Selected->Data; tvXML->Items->Clear(); p = DrawXMLItem(XML->Root, 0, p); tvXML->FullExpand(); if (!p) then tvXML->Selected = tvXML->Items[0]; else tvXML->Selected = p; } //------------------------------------------------------------------------ void* TfrmMain::DrawXMLItem(XMLItem* XMLItem, TTReeNode* Node, void* Data) { TTreeNode* n = tvXML->Items->AddChild(Node, XMLItem->Name); int i; void* p = 0; n->Data = XMLItem; if (int(n->Data) == int(Data)) p = n; for (int i = 0; i < XMLItem->SubItemCount; i++) if (!p) p = DrawXMLItem(XMLItem->SubItems[i], n, Data); else DrawXMLItem(XMLItem->SubItems[i], n, Data); return p; }
-
Erstmal danke!!!!
Aber leider komme ich immer noch nicht weiter!!!
Wenn einer Lust hat sich das ganze mal anzuschauen, ich habe die Komponente mit dem Demoprojekt(welches ich Übersetzen möchte) auf dem Server meines Bruders geladen.
Die *.pas heißt "MainForm.pas"
http://www.autogas-emsland.de/XMLParser.zipGruß Lisa