DrawText geht in einer Unit nicht???
-
Hallo, stehe vor einem Rätsel. Ich zeichne eine ListView selbst; dies funktioniert in Units eines anderen Projekts einwandfrei; kopiere ich nun die Funktion rüber kommt immer bei DrawText (kommt in der Funktion zweimal vor) die Meldung:
[C++ Warnung] LokalePC.cpp(931): W8006 const Windows__1 wird mit ComCtrls__9 initialisiert
Vollständiger Parser-Kontext
LokalePC.cpp(914): Analyse von: void _fastcall TForm18::frm18_lvTabelleDrawItem(TCustomListView *,TListItem *,TRect &,TOwnerDrawState)
[C++ Fehler] LokalePC.cpp(942): E2034 Konvertierung von 'char *' nach 'const wchar_t *' nicht möglich
Vollständiger Parser-Kontext
LokalePC.cpp(914): Analyse von: void _fastcall TForm18::frm18_lvTabelleDrawItem(TCustomListView *,TListItem *,TRect &,TOwnerDrawState)
[C++ Fehler] LokalePC.cpp(942): E2342 Keine Übereinstimmung des Typs beim Parameter 'lpString' ('const wchar_t *' erwartet, 'char *' erhalten)
Vollständiger Parser-Kontext
LokalePC.cpp(914): Analyse von: void _fastcall TForm18::frm18_lvTabelleDrawItem(TCustomListView *,TListItem *,TRect &,TOwnerDrawState)Funktion (ListView ist frm18_lvTabelle):
void __fastcall TForm18::frm18_lvTabelleDrawItem(TCustomListView *Sender, TListItem *Item, TRect &ARect, TOwnerDrawState State) {try { // Fehlerroutine Start Integer iSymb,iAnz,iB,iStil,iItem; AnsiString z1,z2; // Vars definieren TColor f1,f2; TCanvas *ACanvas; // Vars definieren TListView *LView= dynamic_cast<TListView *> (Sender); // Versuchen, Sender als TListView anzusprechen TRect CRect; // Rect Strukt vorbereiten Graphics::TBitmap *bmp; // Bitmap vorbereiten z1 =" "+Item->Caption; // aktuelle Spalte iAnz =Item->SubItems->Count; // Anzahl Subs iItem =Item->Index; // Index ermitteln ACanvas=LView->Canvas; // Canvas übergeben f1 =clWhite; // Voreinstellung HG in ws f2 =clGray; // Textfarbe iStil =DT_LEFT; // Ausrichtung // if(oZugZeil==true && Odd(iItem)==true) { f1=0x00EEEEEE; } // HG, alle 2 Zeilen hellgrau if(Odd(iItem)==true) { f1=0x00EEEEEE; } // HG, alle 2 Zeilen hellgrau if(State.Contains(cdsSelected)==true) { f1=clSkyBlue; f2=clNavy; } // Eintrag ist selektiert CRect=ARect; // Koords neu übergeben CRect.Right=LView->Columns->Items[0]->Width-1; // Breite 1. Spalte ACanvas->Brush->Color=f1; // Farbe HG festlegen ACanvas->Font->Color =f2; // Farbe VG festlegen ACanvas->FillRect(CRect); // HG befüllen CRect =ARect; // Koords neu übergeben CRect.Left+=20; // Text wegen Symbole mehr rechts ACanvas->Font->Name="Arial"; ACanvas->Font->Size=8; // Schriftart DrawText(ACanvas->Handle,"test",-1,&CRect,iStil | DT_VCENTER | DT_SINGLELINE); // und beschriften iSymb=Item->ImageIndex; // aktuelles Symbol vorne? CRect.Left-=20; // Koordinate wieder abziehen bmp =new Graphics::TBitmap(); // neue Bitmap anlegen Form1->frm1_ImageList1->GetBitmap(iSymb,bmp); // und aus ImageListe holen ACanvas->Draw(CRect.Left,CRect.Top,bmp); // Checkbox zeichnen delete bmp; // Bitmap löschen // SUBITEMS ZEICHNEN CRect=ARect; // Koords neu übergeben for(int i1=0;i1<iAnz;i1++) { // die Subs zeichnen z1=" "+Item->SubItems->Strings[i1]; // Spaltentext auslesen iB=LView->Columns->Items[i1]->Width; // Breite der Spalte X //f1=clWhite; if(oZugZeil==true && Odd(iItem)==true) { f1=0x00EEEEEE; } // HG, alle 2 Zeilen hellgrau f1=clWhite; if(Odd(iItem)==true) { f1=0x00EEEEEE; } // HG, alle 2 Zeilen hellgrau f2=clBlack; // Textfarbe CRect.Left +=iB; // X1-Koord neu CRect.Right =CRect.Left+LView->Column[i1+1]->Width-1; // X2-Koord neu iStil =DT_LEFT; // Ausrichtung switch(i1) { // welche Spalte? case 0: // 01 GERÄTENAME f2=clBlue; // Standard if(z1.AnsiPos("unbekannt")>0) { f2=clRed; } // Gerät unbekannt break; // und fertig case 1: // 02 GERÄTETYP f2=clBlue; // Standard break; // und fertig default: break; // WEITERE SPALTEN STANDARD } // ende switch(i1 if(State.Contains(cdsSelected)==true) { f1=clSkyBlue; f2=clNavy; } // Eintrag ist selektiert ACanvas->Brush->Color=f1; // Farbe HG festlegen ACanvas->Font->Color =f2; // Farbe VG festlegen ACanvas->FillRect(CRect); // HG befüllen DrawText(ACanvas->Handle,z1.c_str(),-1,&CRect,iStil | DT_VCENTER | DT_SINGLELINE); // und beschriften } // ende for(i1 } catch(Exception& e) { MessageBox(NULL, e.Message.c_str(), "TForm18::frm18_lvTabelleDrawItem()", MB_OK); } // Fehler anzeigen }Zeile 30 und Zeile 67 meckert er; wenn ich die wegmache, dann meckert er nicht mehr, zeichnet aber (logischerweise) auch nicht mehr
Die Eigenschaft OwnerDraw sitzt auf True.Was will der Bub äh BCB von mir? Grübel...
Danke für jeden Tipp.
Gruss Stefan
-
Schau dir mal die Fehlermeldungen genau an. Du scheinst in diesem Projekt Unicode aktiviert zu haben, d.h. du mußt alle Parameter als wchar_t anstatt char übergeben:
DrawText(..., L"test", ...); WideString ws = L"blabla"; DrawText(..., ws.c_str(), ...);P.S. Anstatt der meisten unsinnigen Kommentare solltest du besser deine Variablen aussagekräftigere Namen geben
-
Hallo Th
Vielen Dank für Deine Antwort. Am Anfang stand tatsächlich define UNICODE.
War mir bis Dato unbekannt.Was meine "unsinnigen" Variabeln betrifft, jeder hat seinen Stil

Grüsse, Stefan
-
Bzgl. des Stils solltest du daran denken, daß es schwer ist, solchen Code zu lesen und zu verstehen (trotz der Kommentare).
Aber hast ja Glück gehabt, daß ich dir helfen konnte -)