[C++] Convert AnsiString to Const char * hoe????

Pagina: 1
Acties:

  • GAEvakYD
  • Registratie: Juni 2001
  • Laatst online: 15:27
Hey, ik ben bezig met een eigen c== proggie met formulieren, ik moest op school voor de opdrachten telkens gebruik maken van console applicaties. Mwet forumlieren werk het heel wat anders, ik heb alles voor het programma al klaar (eerst een console app gemaakt , de hele classes en gelinkte lijsten enzo)
Ik wil gewoon iets simpels doen, invoeren in een edit box en dat effe in een meo veld zetten. Dan geeft die de fout dat de value van de edit box van het formaat Ansi string is. Ik wil het in een char * zetten. Nu zegt die dus als ik strcpy uitvoer dat die deze conversie niet kan maken. Pleasee help me

/*
char Newcontactname[50], Newnumber1[50];
strcpy(Newcontactname,frmNew->edtContactname->Text);*/

dit is de foutmelding

[C++ Error] Newcontact.cpp(27): E2034 Cannot convert 'AnsiString' to 'const char *'
[C++ Error] Newcontact.cpp(27): E2342 Type mismatch in parameter '__src' (wanted 'const char *', got 'AnsiString')

  • Orphix
  • Registratie: Februari 2000
  • Niet online
AnsiString was C++Builder als ik het goed heb. Tijd geleden dat ik daar mee gewerkt heb, maar ik dacht dat die classe een impliciete const char* conversie had ?
Maar ik geloof dat er ook een method is die een const char* teruggeeft, moet je ff in de help zoeken.
Als ze slim zijn geweest kan het dit zijn:
code:
1
2
char Newcontactname[50], Newnumber1[50];
strcpy(Newcontactname,frmNew->edtContactname->Text.c_str());

  • GAEvakYD
  • Registratie: Juni 2001
  • Laatst online: 15:27
Zkz , het werkt.

Harstikke bedankt joh, kicke :9

  • Orphix
  • Registratie: Februari 2000
  • Niet online
you're welcome :)

  • GAEvakYD
  • Registratie: Juni 2001
  • Laatst online: 15:27
Kut, durf het haast niet te vragen, maar ik ben duidelijk een console app boer, want van al die form dingen enzo snap ik geen flikker man.

Nu krijg ik weer niets in de listbox, kan niet een juiste method vinden en die help files zijn ook al zo lekker duidelijk. Weet je dat ook toevallig, of raad je wat anders aan om iets in weer te geven,. Het gaat om 4 collommen dan (nu 4 listboxen) die overzichtelijk getoont moeten worden.

Heb ook wel eens van een stringgrid gehoord, maar ik kom nog geens uit de listbox dus begin ik daar nog maar niet aan.


Arggg echt erg dit, weet je redelijk hoe C++ opzicht werkt enzo. Kun je geen eens een redelijke app maken SCHAAAM

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Tja helaas maakt elke (GUI) API weer zijn eigen datastructuren en conventies :(

Maar ik zou echt niet precies meer weten hoe de TListBox werkt. Ik neem aan dat je eerst een item moet construeren en die in de lijst moet plaatsen. Zoek eens naar TItem en TIemList oid.

btw, de VCL heb ik altijd wel erg prettig gevonden om mee te werken. Voor een beginner is het altijd nog makkelijker dan MFC...

  • GAEvakYD
  • Registratie: Juni 2001
  • Laatst online: 15:27
Zal eens effe zoeken, in iedergeval bedankt

  • [ti]
  • Registratie: Februari 2000
  • Niet online
TListView gebruiken. Kolommen met de Object Inspector definieren, daarna:
code:
1
2
3
4
5
6
7
8
TListItem *Item;

Item = ListView1->Items->Add();

Item->Caption = "1e Kolom";
Item->SubItems->Add("2e Kolom");
Item->SubItems->Add("3e Kolom");
Item->SubItems->Add("4e Kolom");

  • GAEvakYD
  • Registratie: Juni 2001
  • Laatst online: 15:27
Wowww, als ik dat doe, dan gebeurt er iets dat windows minder fijn vind. Een Acces violation blabla bla. Dammit

  • [ti]
  • Registratie: Februari 2000
  • Niet online
Mja, dan doe je iets anders fout, want het werkt hier gewoon (net getest, exact die code achter 'n OnClick van 'n button gehangen, en 'n listview op 't form gedropt...)

  • GAEvakYD
  • Registratie: Juni 2001
  • Laatst online: 15:27
Ow kut zeg zeg,

Maar hij pkat deze regel ook niet.

lstv1 = ListView1->Items->Add();
[C++ Error] Newcontact.cpp(157): E2451 Undefined symbol 'ListView1'

Als ik die dus weg haal, runt die wel maar crasht die bij de onclick.

  • GAEvakYD
  • Registratie: Juni 2001
  • Laatst online: 15:27
oeps, ik deed iets fout, werkt lekker, eens effe kijken of ik de rest ook een beetje snap

Thnaks man

Maar hoe kan ik nu de 4 colommen van elkaar scheiden dan?, zodat elke keer dat ik uit een while loop kom dat "bla" naar kolom 1 gaat "eee" naar kolom 2 etc etc.

  • [ti]
  • Registratie: Februari 2000
  • Niet online
Tja, dat ligt aan de criterea waarop je de data in verschillende kolommen wilt hebben.

Als je bv. een ListView zo indeeld:

Username | Password | Fullname | AccessLevel

Dan zou je dus iets in je code krijgen als:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
TListItem *Item;

Query1->Close();  // Query sluiten/ingeven/uitvoeren
Query1->SQL->Lines = "SELECT * FROM Users";
Query1->Open();

while (!Query1->Eof) // Zolang er nog records zijn.
{
  Item = ListView1->Items->Add(); // Nieuwe row toevoegen aan listview
 
  Item->Caption = Query1->FieldByName("Username")->AsString();
  Item->SubItems->Add(Query1->FieldByName("Password")->AsString());
  Item->SubItems->Add(Query1->FieldByName("Fullname")->AsString())
  Item->SubItems->Add(Query1->FieldByName("AccessLevel")->AsString());
  
  Query1->Next(); // volgende record van resultset
}

TQuery is 't component voor sql commando's enzo uit te voeren, die heb ik in dit voorbeeld gebruikt omdat je vaak data welk uit een resultset van een query komt wilt weergeven in bv. een listview.

  • GAEvakYD
  • Registratie: Juni 2001
  • Laatst online: 15:27
Hmm , effe kijken of ik dit kan veranderen in zonder queries.

Moet toch lukken, dit is echt kicke dat C++

  • GAEvakYD
  • Registratie: Juni 2001
  • Laatst online: 15:27
Ik heb nog een klein vraaggie. Als ik een nieuwe variablen aanmaak, dan wil ik dat die door alle unit gebruikt kan worden (een queue lijst). Hierin zitten weer 1 class CNode, dit is een gelinkte lijst, en hierin zit er nog 1 CData met de data zelf.

Als werktt lekker, alleen nu wil ik dat ik in het hoofdprogramma, zo'n hoofdqueue aan kan mnaken en dat die dan in alle cpp files te gerbuiken is met set en get functies. Ik heb al geprobeert te includen enzo maar dat werkt niet.

Het is zoiets van
CQueue _export *qQ = CQueueInstant();
CData _export *data;

en dan in de andere unit zeggen
CQueue _import *qQ;
CData _import *data;

Maar dit gaat niet goed , dan zegt die bij compilen
[Linker Warning] Public symbol '_qQ' defined in both module C:\1\\MAIN.OBJ and C:\1\\NEWCONTACT.OBJ
[Linker Warning] Public symbol '_data' defined in both module C:\1\\MAIN.OBJ and C:\1\\NEWCONTACT.OBJ

Wat doe ik fout, ik wil dus doorheel mijn programma 1 Queue variabelen gebruiken, met alle data erin, het lukt me dus wel als alles in 1 unit staat.


Please help me

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Je kan het zo doen
queue.h:
code:
1
2
3
4
class CNode  { ... };
class CData  { ... };
class CQueue { ... };
extern CQueue *lijst;

queue.cpp:
code:
1
2
3
4
#include "queue.h"
CQueue *lijst = 0;
// implementatie van alle classes
// EN VERGEET NIET lijst EEN WAARDE TE GEVEN

  • GAEvakYD
  • Registratie: Juni 2001
  • Laatst online: 15:27
Sorry had net het bericht gewijzigd, op die manier kan het dus niet?????, anders moet ik alles opgooien zo te zien

  • Orphix
  • Registratie: Februari 2000
  • Niet online
en wat als je die _import en _export weghaalt en dan in de 'andere' unit dit zet:
extern CQueue *qQ;
extern CData *data;

  • GAEvakYD
  • Registratie: Juni 2001
  • Laatst online: 15:27
Zekers wel, heb net effe die eerste manier van jou gedaan, en het werkt op het eerste oog opslag. Eens effe verder kijken of het werkt.

Beters , hier wordt je echt happy van


Ik ga nu slapen, bedankt man
Pagina: 1