Zum Inhalt springen

StarLord

Mitglieder
  • Gesamte Inhalte

    51
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von StarLord

  1. Ach ja, nochwas zu ShellExecute: Private Declare Function ShellExecute Lib "shell32.dll" _ Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _ ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, _ ByVal nShowCmd As Long) As Long 'nShowCmd Konstanten: Const SW_HIDE = 0 Const SW_SHOWNORMAL = 1 Const SW_NORMAL = 1 Const SW_SHOWMINIMIZED = 2 Const SW_SHOWMAXIMIZED = 3 Const SW_MAXIMIZE = 3 Const SW_SHOWNOACTIVATE = 4 Const SW_SHOW = 5 Const SW_MINIMIZE = 6 Const SW_SHOWMINNOACTIVE = 7 Const SW_SHOWNA = 8 Const SW_RESTORE = 9 Const SW_SHOWDEFAULT = 10 Const SW_FORCEMINIMIZE = 11 Const SW_MAX = 11 'Und dann gibts noch für lpOperation folgendes: ' "open" => Öffnet eine Datei, kann kein Verzeichnis öffnen! ' "print" => Druckt eine druckbare (nicht ausführbare) Datei ' "explore" => Öffnet das Verzeichnis mit dem Explorer Private Sub Form_Load() ShellExecute Me.hwnd, vbNullString, "Tips.txt", vbNullString, "C:\Windows", SW_SHOWNORMAL End Sub
  2. Natürlich bekommst du bei dir nur den Dateinamen zurück. Dir überprüft auch nur ob die angegebene Datei existiert. Wenn du den Pfad willst reicht es doch wenn du von dlg.filename ab dem letzten Backslash ("\") den String abschneidest. Wo ist denn da das Problem? Hier mal eine Funktion die ich mal geschrieben habe: Function SeperatePath(SearchPath As String) As String Dim PathSeperatorPos, LastPathSeperatorPos As Integer PathSeperatorPos = 1 Do Until PathSeperatorPos = 0 LastPathSeperatorPos = PathSeperatorPos PathSeperatorPos = InStr(PathSeperatorPos + 1, SearchPath, "\") Loop SeperatePath = Left(SearchPath, LastPathSeperatorPos) End Function Wenn du den abschließenden Backslash nicht brauchst: SeperatePath = Left(SearchPath, LastPathSeperatorPos - 1) Gruß, StarLord
  3. Natürlich geht das. Hier ein simples Beispiel: Private Sub Command1_Click() If Dir("C:\Windows\Tips.txt2", vbNormal) <> "" Then MsgBox "Datei gefunden.", vbOKOnly Else MsgBox "Datei nicht gefunden!", vbOKOnly End If End Sub Gruß, StarLord
  4. Richtig, und deshalb ist es nicht Sinnvoll den Dateinamen mit "*.*" vorzubesetzen. Das hatte ich aber schon geschrieben... du hattest anscheinend auch keine Zeit mein Posting mal durchzulesen. Siehe nächster Absatz Du brauchst mir nicht erklären was ShowOpen macht, ich programmiere in VB schon länger. Allerdings scheinst du nicht zu verstehen dass ShowOpen einen modalen Dialog mit Rückgabewert aufruft. Diesen Rückgabewert kann man dann abfangen, z.B.: dlg.CancelError = TRUE ' Aktiviert die Cancel-Benachrichtigung if dlg.ShowOpen = cdlCance then exit sub/function 'User hat auf Abbrechen gedrückt => Funktion bzw Prozedur beenden ... Richtig, wenn der Anwender einfach auf OK klickt steht immer noch dein "*.*" drin. Deshalb sollte man es mit einem leerem String besetzen und dann einfach auf strlen <> 0 überprüfen. Ob die Datei existiert wirst du später sowieso noch einmal prüfen müssen. Allerdings wird deine Variante versagen wenn der Benutzer eine Datei auswählt und danach auf Abbrechen klickt. Deshalb solltest du auch das Abbrechen abfangen, wie das geht hatte ich ja schon erklärt. Man kann es auch umständlich machen wenn es einfach geht. In deinem Fall braucht man kein einziges Goto und ein OnError Resume ... wäre wohl eher angebracht. Seltsam, bei mir funktioniert Shell "start C:\Windows\Tips.txt", vbHide einwandfrei... es mag sein dass es unter WinNT, 2K oder XP nicht funktioniert. Aber unter Win98 klappt es ohne Probleme. Es gäbe auch noch eine andere Möglichkeit eine Datei ohne "start" aufzurufen... aber das wäre zu kompliziert und ich will euch (eher gesagt DICH) damit nicht überfordern. Ehrlich gesagt verstehe ich nicht was du ständig mit "Filesytemobjects" meinst... falls du die Standard APIs für Dateizugriffe meinst kann ich dir nur recht geben. Wenn du schon so Ignorrant bist kannst du dir deinen Code selbst schreiben. Denn DU bist diejenige die nicht richtig gelesen hat oder MEINE Kritik nicht verstanden hat. Du kannst programmieren wie du willst. Früher oder später wirst du aber bei komplexeren Programmen auf die Nase fallen. Und da du keine Kritik verträgst und auch auf Vorschläge nicht einmal eingehen willst wird dies wahrscheinlich schon früher geschehen als dir lieb ist. Hochmut kommt vor dem Falle. EOD, StarLord
  5. @Tiana! Als ich deinen Code-Beispiel gelesen habe viel mir nur eines ein: Uuuuaaaaahhh! Wer hat DIR denn das Programmieren beigebracht? 1. Um Himmelswillen! GOTO verwendet man heutzutage auch in Visual Basic NICHT mehr, so etwas wird nur im NOTFALL (und in Assembler) eingesetzt. 2. Filename besetzt man meist überhaupt nicht vor, es sei denn man will eine bekannte Daten öffnen, z.B. "setup.ini" Um "*.*"-Dateien anzeigen zu lassen gibt es den Filter. 3. Dein ShowOpen wird nicht abgefangen. Wenn der Benutzer auf Cancel drückt kann man dies abfragen und dann kannst du dir auch dein GOTO schenken. 4. Der Ansatz mit Shell war schon nicht schlecht. Wenn er die Excel-Dateien wirklich mit Excel öffnen will, sollte man aber "shell start dlg.FileName" benutzen 5. Ich glaube kaum dass er es schafft _direkt_ auf die EXCEL-Dateien zugreifen zu können. Mehr als Öffnen oder Schließen wird wohl nicht drin sein. CSVs wird er schon noch schaffen, aber XLS-Dateien... nö, das schafft er nie. Gruß, StarLord
  6. Bitte nur in eine Gruppe posten, danke! Ich würde dir die Freeware zlib-Library empfehlen. Gibts für viele verschiedene Betriebssysteme. Gruß, StarLord
  7. Was ist da eigentlich das Problem? #include <stdio.h> #include <conio.h> void main (void) { int values[10]; int counter; clrscr(); for (counter = 9; counter != -1; counter--) { values[counter] = counter+1; printf("%d\n", values[counter]); } while(!kbhit()); getch(); }
  8. Normalerweise sollte es mit break klappen. Alternativ (oder besser zusätzlich) könntest du auch die Schleifenbedingung erfüllen. Falls du jetzt fragst: "Wie?", hier ein kleines Beispiel: int counter; for (counter = 0; counter <= 255; counter++) { if (counter == 100) { counter = 256; // Entweder so abbrechen break; // Oder so abbrechen // Oder beide zusammen, aber das break sollte als letzte Anweisung kommen! } } In meinem Beispiel sollte die Schleife auf jeden Fall abbrechen wenn der Wert 100 erreicht wird. Hast du dir eigentlich schon mal Gedanken über ein Ablauf-Diagramm gemacht? Wenn du eines erstellst dürfte das ganze doch gar kein Problem sein. Nur als Tipp: In professionellen Spielen gibt es immer eine Status-Variable. In deinem Fall könnte sie folgende Ereignisse (Events) enthalten: MOVE, KEYDOWN, COLLISION, PAUSE, GAMEOVER, INTRO, STATUS, etc., etc. Gruß, StarLord
  9. Habs zwar nicht ausprobiert, aber mit vbNewLine müsste es gehen. Beispiel: ToolTipText = teil1 & vbNewLine & teil2 Es kann sein dass es für ToolTips nicht funktioniert. Gruß, StarLord
  10. StarLord

    Problemfrage in C

    Natürlich, empfehle ich aber nicht. So was wird sehr unübersichtlich. Den gleichen Befehl um ein switch/case abzubrechen kann man auch für For- und While-Schleifen verwenden: break Gruß, StarLord
  11. StarLord

    Problemfrage in C

    Nein! Du willst doch auf Tastatureingaben reagieren und nicht darauf warten... oder habe ich das falsch verstanden? Gruß, StarLord
  12. StarLord

    Problemfrage in C

    Ob du es dir vorstellen kannst weiß ich nicht, aber erklären kann ichs dir. Die Funktion kbhit() liefert TRUE (wert != 0) zurück wenn eine Taste gedrückt worden ist. #include <conio.h> nicht vergessen! Hier ein Beispiel: for ( wurmkörper=x_koordinate; x_koordinate > 1; x_kkordinate--) { static char keycode; // Notfalls außerhalb der Schleife definieren, static ist wichtig! if (kbhit()) { keycode= getch(); switch(keycode) { // In diesem Beispiel werden sowohl Klein- als auch //Großbuchstaben abgefangen und ausgewertet case 'w': case 'W': //mach dies und das break; case 's': case 'S': //mach dies und das break; case 'a': case 'A': //mach dies und das break; case 'y': case 'Y': //mach dies und das break; } }
  13. Mit MoveFile??? Im AutoStart-Ordner haben Exe-Dateien überhaupt nichts verloren. Dort gehören nur Links rein.
  14. Ist es schon, ich spiele es schon seit längerem mit einem no-CD Patch (allerdings für Version 1.3) und das Spiel läuft wunderbar ohne Fehlermeldungen. Ihr könnt euch übrigens euere Diskussionen zum Thema "Raubkopie" sparen: Ich habe mir das Original für 45 Euro beim Mediamarkt gekauft und bin zu faul ständig die CDs zu wechseln. Nicht jeder der no-CD Cracks benutzt ist ein Raubkopierer, zumal Jedi Knight 2 überhaupt keinen Kopierschutz hat und somit von jedem ohne weiteres gebrannt werden kann. Nur DAUs sind zu doof dazu... aber das ist auch eine anderes, nicht diskutierwürdiges Thema. Gruß, StarLord
  15. Das ist richtig. Dem stimme ich auch zu. Verwirrend, aber IMHO richtig. Nein, bei uralt Rechnern wird das CD-ROM weder vom Bios erkannt und angezeigt, noch im Bios eingestellt. Man setzt die Einstellung im Bios einfach auf "none" und installiert den DOS-ATAPI-Treiber. Danach sollte es eigentlich funktionieren. Gruß, StarLord
  16. Seltsam, mein universelles Übersetzungsprogramm für planetare und interplanetare Sprache zeigt mir bei der Eingabe deiner Aussage nur folgendes an: New language found! Please contact admin and tell him the new discoverd (and possible) intelligent life form. Thank you! Kurz gesagt heißt es: "Versehe kein Wort!" Gruß, StarLord
  17. Den AutoStart-Ordner würde ich nicht verwenden, dazu musst du nämlich einen Link deiner Exe-Datei in den AutoStart-Ordner kopieren. Ich würde es direkt in die Registry schreiben. Folgender Eintrag verwaltet die Programme beim Windowsstart: "HKLM\Software\Microsoft\Windows\Current Version\Run" Erstelle darunter einen Schlüssel für dein Programm erstellen, z. B: "myprog" = "c:\myprog\myprog.exe" Mit der API-Funktion "RegCreateKey" kannst du den Schlüssel erstellen, weitere Infos findest du im Internet. Stelle auch sicher dass der Benutzer den Autostart auch Im Programm selbst deaktivieren kann. Gruß, StarLord
  18. Folgende Autorun.inf müsste gehen: [autorun] open = start "\verzeichnis\index.html" Der Verzeichnisname und der Dateiname muss natürlich entsprechend angepasst werden, das Verzeichnis kann auch ganz weggelassen werden. Gruß, StarLord
  19. Such mal in der VC++ Hilfe nach "Console Functions". Gruß, StarLord
  20. Ok, hier ein lauffähiges Beispiel (DOS Borland C Compiler): #include <stdio.h> #include <conio.h> // Struktur definition muss für beide Funktionen vorhanden sein, daher mal global struct my_struct { int a; int b; }; // Funktionen definieren void main ( void ); void funktion1( void ); void funktion2( struct my_struct *p_struct ); void main() { clrscr(); funktion1(); while(!kbhit()); getch(); } void funktion1( void ) { static struct my_struct test_struktur; test_struktur.a = 100; test_struktur.b = 2000; funktion2(&test_struktur); } void funktion2(struct my_struct *p_struct) { printf("p_struct:\n\ta= %d\n\tb= %d", p_struct->a, p_struct->; } [/code] Alles klar, oder wolltest du es anders haben? Gruß, StarLord
  21. Auch das geht, solange er die Struktur (bzw den Zeiger auf die Struktur) als "static" deklariert, damit beim verlassen des Anweisungsblockes die Struktur-Daten nicht gelöscht werden bzw der Zeiger verloren geht. Die Main-Funktion ist übrignes auch nur eine Funktion... sagt ja schon der Name. Gruß, StarLord
  22. Jetzt muss ich auch noch meinen Lieblingsspruch abändern damit ich dazu Worte finde: "Wer zählen kann hat Vorteile im Leben!" Macht aber nix, jeder macht mal Fehler. Gruß, StarLord
  23. Logisch ist dein Vorschlag schon, aber der Aufwand ist einfach zu groß. "PLZ1, Ort1 und PLZ2, Ort2" hätten auch gereicht. Man merkt womit ihr euere wertvolle Prüfungszeit verplempert... Gruß, DarkSoul
  24. Natürlich geht es und natürlich muss die Funktion den Aufbau der Struktur kennen... was sollte das ganze sonst bringen? Wenn es nicht gehen würde wäre Windows ganz schön aufgeschmissen: ist zwar hier OT, aber habt ihr euch schon mal die SetupAPI-Funktionen angeschaut? Da wird einem von Strukturen und Zeiger auf Strukturen richtig schlecht... In dem 1. geposteten Beispiel fehlt übrigens der Address-Operator: funktion2(&p_zeiger) sollte es wohl heißen sonst haut das mit dem Pointer nicht so ganz hin. Gruß, StarLord
  25. Sollte das eine "DAU-Warnung" sein? So schlau wird er schon sein GetCurrentDirectory direkt nach dem Programmstart aufzurufen und den Pfad in einer globalen Variable zu speichern... sorry, aber ich poste hier erst seit heute und kenne die Leute noch nicht. Gruß, StarLord

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...