bool __fastcall TForm1::DeleteFile(AnsiString FileName)
{
SHFILEOPSTRUCT FileOPStruct;
// An den Dateinamen noch eine zusätzliche '\0' anhängen,
// da mehrere Dateinamen durch '\0' getrennt zulässig sind
// das Ende der Liste durch eine Doppel-NULL bzw. Leerstring
// gekennzeichnet sein muss.
FileName+='\0';
FileOPStruct.hwnd=NULL;
FileOPStruct.wFunc=FO_DELETE;
FileOPStruct.pFrom=FileName.c_str();
FileOPStruct.pTo=NULL;
// Folgende Flags sind in shellapi.h definiert
// FOF_NOCONFIRMATION = Kein User-Prompt anzeigen
// FOF_NOERRORUI = Keine Fehlermeldung anzeigen
// FOF_ALLOWUNDO = Löschen über Papierkorb
// FOF_SILENT = Keine Fortschrittsanzeige
FileOPStruct.fFlags=FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_ALLOWUNDO | FOF_SILENT;
FileOPStruct.hNameMappings=NULL;
FileOPStruct.lpszProgressTitle=NULL;
if(SHFileOperation(&FileOPStruct))
return(false); // Löschen fehlgeschlagen
else
return(true); // Datei wurde gelöscht
}
[ Dieser Beitrag wurde am 02.03.2002 um 21:57 Uhr von Jansen editiert. ]
@Serge,
ich hab den Code tatsächlich nur überflogen und das if() übersehen.
Aber generell lohnt es sich wohl das immer zu machen.
Deine Erklärung war gut, Danke.
Gruß Mikel
Ja, das ist der Grund... In der Builder- Hilfe wird zwar nur die DLL des Explorers angesprochen, doch funktioniert es erst nach der inst. des Internet- Expl. images/smiles/icon_sad.gif
[ 30.08.2001: Beitrag editiert von: swifti ]
Da könnte ich auch nur aus der Hilfe zitieren: dass Scale nur zur Beeinflussung der Darstellung verwendet wird, wobei das Bild an sich aber nicht geändert wird.
Ein images/smiles/icon_biggrin.gif sowohl an Peter als auch an WP.
Das mit dem BlueScreen hier liegt wohl an meiner Grafikkarte, auf dem anderen Rechner läuft SpriteAnimate einwandfrei(und sieht in der Tat ziemlich gut aus).
Ansonsten will ich auch gar nicht behaupten, dass sich alle der Beispiele kompilieren lassen, und da DirectX nun mal ein M$-Produkt ist wird es immer auf VC++ mit seinen proprietären Erweiterungen ausgerichtet sein. Prinzipiell ist es aber offensichtlich durchaus möglich, mit relativ geringem Mehraufwand auch auf dem BCB entsprechende Programme zu schreiben.
Vielleicht kann Dein Rechner die Abschaltfunktion nicht
Bei mir liefs einwandfrei.
-------------------------------------------------------------------
Nachtrag (Posting von <Redhawk> )
So. Ich habs rausgefunden.
Für WIN2000:
// Windows beenden und Rechner ausschalten
if(ExitWindowsEx(EWX_LOGOFF | EWX_POWEROFF, NULL)==NULL)
{
ShowMessage("Fehler beim ExitWindowsEx");
return;
}
Für WINNT4
// Windows beenden und Rechner ausschalten
if(ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, NULL)==NULL)
{
ShowMessage("Fehler beim ExitWindowsEx");
return;
}
Müßte funktionieren.
-------------------------------------------------------------------
[ 20.09.2001: Beitrag editiert von: Peter ]
[ Dieser Beitrag wurde am 20.10.2002 um 12:54 Uhr von Jansen editiert. ]
Damit wird die Scrollbar an den derzeit längsten Eintrag angepasst, bei Änderungen der Einträge muss der Code ggf. wiederholt aufgerufen werden.
int MaxWidth = 0;
for (int i = 0 ; i < ListBox1->Items->Count ; i++)
{
MaxWidth = max(MaxWidth,
ListBox1->Canvas->TextWidth(ListBox1->Items->Strings[i]));
}
SendMessage(ListBox1->Handle, LB_SETHORIZONTALEXTENT, MaxWidth, 0);
[ 17.08.2001: Beitrag editiert von: Jansen ]
Das richtet sich normalerweise nach den Locale-Einstellungen des Benutzers, man kann das aber natürlich auch überschreiben:
// sysutils.hpp enthält eine Liste von globalen Variablen,
// die beim Programmstart aus den Windowseinstellungen
// übernommen werden und die man im Programm ändern kann
#include <sysutils.hpp>
DecimalSeparator = '.';
//bzw. in neueren BCB-Versionen:
FormatSettings.DecimalSeparator = '.';
// falls erforderlich kann man sicherstellen, dass im Laufe
// des Programms nicht wieder die ursprünglichen Einstellungen
// benutzt werden
Application->UpdateFormatSettings = false;
Super, danke für die Info http://www.c-plusplus.net/ubb/ubb/smile.gif
------------------
Gruß Peter
Wenn Dein Programm auf Anhieb läuft, hast Du irgendwas falsch gemacht
Ausserdem, ein Blick in die Online-Doku und ein wenig Kreativität wirken manchmal Wunder.
Probiere es mal mit folgendem Code.
#include <lm.h>
AnsiString GetUserFullname(AnsiString strUsername)
{
AnsiString strFullname;
PNET_DISPLAY_USER pBuff, p;
DWORD res, dwRec, i = 0;
do // begin do
{
//
// Call the NetQueryDisplayInformation function;
// specify information level 1 (user account information).
// This code returns the data in chunks of 25 bytes to
// demonstrate how to make the request over and over again.
//
res = NetQueryDisplayInformation(WideString(""), 1, i, 1000, 25, &dwRec, (void **)&pBuff);
//
// If the call succeeds,
//
if((res==NERR_Success) | | (res==ERROR_MORE_DATA))
{
p = pBuff;
for(;dwRec>0;dwRec--)
{
//
// Print the retrieved user information.
//
if (strUsername == p->usri1_name)
{
strFullname = p->usri1_full_name;
}
//
// If there is more data, set the index.
//
i = p->usri1_next_index;
p++;
}
//
// Free the allocated memory.
//
NetApiBufferFree(pBuff);
}
//
// Continue while there is more data.
//
} while (res==ERROR_MORE_DATA); // end do
return strFullname;
}
------------------
Happy Building
wünscht
Happy Builder
Ein Besuch der sich lohnt: http://www.bcbarena.de
Ich habe mal in einem alten Buch nachgeschaut. Es sieht so aus, als hätte sich die Schnittstelle für TDataSet geändert. Ich nehme an, daß die folgenden Zeilen das Problem beinhalten:
for (int iCol = 0; iCol < pQuery->Fields->Count; iCol++)
{
Variant Range = WorkSheet.OlePropertyGet("Cells", iRow+1, iCol+1); // 1.Zeile / 1.Spalte
Range.OlePropertySet("Value", pQuery->Fields->Fields[iCol]->AsString);
}
Der folgende Code sollte für den Borland C++ Builder 3 das richtige Ergebnis liefert.(nicht getestet)
for (int iCol = 0; iCol < pQuery->FieldCount; iCol++)
{
Variant Range = WorkSheet.OlePropertyGet("Cells", iRow+1, iCol+1); // 1.Zeile / 1.Spalte
Range.OlePropertySet("Value", pQuery->Fields[iCol]->AsString);
}
[ 17.08.2001: Beitrag editiert von: Jansen ]
Danke, Happy, tolles Forum, viele interessante Sachen !
By the way, würde mich auch interessieren, wie man Deine SaveToExel() auf dem BCB3.0 zum Laufen bringt... irgend eine Idee ?
Klaus hat es über die frühe Bindung gemacht. Wenn du es darüber versuchtst, mußt die die TypeLibary von Excel einbinden, oder die Serverkomponenten dei Borland in der Version 5 mitliefert.
Ich habe noch einen zweiten Weg über die späte Bindung (während der Laufzeit). Hier mußt du keine TypeLibary einbinden.
Hier ist der Code:
#include <ComObj.hpp> // include-Reihenfolge beachten
#include <utilcls.h>
void __fastcall TMainForm::Query1AfterOpen(TDataSet *DataSet)
{
lblCount2->Caption = "Query Count = " + IntToStr(Query1->RecordCount);
SaveToExcel(Query1);
}
void __fastcall TMainForm::SaveToExcel(TQuery *pQuery)
{
Variant Excel;
try
{
Excel = GetActiveOleObject("Excel.Application");
}
catch(...)
{
Excel = CreateOleObject("Excel.Application");
}
//Excel.OlePropertySet("Visible", true);
try
{
Variant WorkBooks = Excel.OlePropertyGet("WorkBooks");
WorkBooks.OleFunction("Add");
Variant ActiveWorkBook = Excel.OlePropertyGet("ActiveWorkbook");
Variant WorkSheets = Excel.OlePropertyGet("Worksheets");
Variant WorkSheet = WorkSheets.OlePropertyGet("Item", 1);
WorkSheet.OleFunction("Activate");
pQuery->First();
for (int iRow=0; iRow < pQuery->RecordCount; iRow++)
{
for (int iCol = 0; iCol < pQuery->Fields->Count; iCol++)
{
Variant Range = WorkSheet.OlePropertyGet("Cells", iRow+1, iCol+1); // 1.Zeile / 1.Spalte
Range.OlePropertySet("Value", pQuery->Fields->Fields[iCol]->AsString);
}
pQuery->Next();
}
ActiveWorkBook.OleFunction("SaveAs", "D:\\Temp\\QueryResult.xls");
}
catch(...)
{
}
Excel.OleFunction("Quit");
Excel = Unassigned;
}
P.S.
Das Beispiel dürfte eine Permiere im Internet sein. Ich habe noch kein Beispielprogramm für den C++ Builder gefunden der die späte Bindung ausführlich aufzeigt.
[ Dieser Beitrag wurde am 13.05.2002 um 18:52 Uhr von Jansen editiert. ]
Ich habe mich erstmal registriert und möchte Dir ganz herzlich danken, daß Du mir bei diesem Problem geholfen hast. Es funktioniert alles so, wie ich es wollte und so langsam verstehe ich auch was in Deinem Quellcode passiert
Danke!
André