Veröffentlicht 7. Oktober 200123 j ich möchte gerne aus einer datum z.b. 05/01/1998, 5 januar den Tag das jahres ermitteln in diesem fall der 5. Tag das jahres X. gibt es dafür eine einfache funktion? wenn ja habt ihr damit schon irgendwelche Erfahrungen? danke erstmal! bis --> <FONT COLOR="#a62a2a" SIZE="1">[ 07. Oktober 2001 22:39: Beitrag 1 mal editiert, zuletzt von drob ]</font>
8. Oktober 200123 j Rechne doch einfach: X:= EncodeDate(1998, 1, 5) - EncodeDate(1998, 1, 1); dann hast du das Ergebnis der Tagesdifferenz in X ... greetings, DZ <FONT COLOR="#a62a2a" SIZE="1">[ 08. Oktober 2001 04:45: Beitrag 1 mal editiert, zuletzt von doublezero ]</font>
13. Oktober 200123 j Durch die "Verschlüsselung" als TDate rechnet er korrekt mit den gültigen Daten (wechselnde Monatslänge, Schaltjahre, etc.) it seems to be no problem ... wmg, DZ
13. Oktober 200123 j danke ... auch wenn ich schon eine andere lösung gefunden habe ... ( Is leapyear(); ) aber naja irgendwie kann man hier ( bzw ich weiss nicht wie) ja nicht solche beiträge ( ich meine meinen beitrag) wieder löschen ... danke und bis -->
13. Oktober 200123 j <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von drob: <STRONG>aber naja irgendwie kann man hier ( bzw ich weiss nicht wie) ja nicht solche beiträge ( ich meine meinen beitrag) wieder löschen ... </STRONG>
13. Oktober 200123 j nagut .. ein gleines anders prob .... ich kenne es noch von TP das mann mit z.b. var x :String ; write(x:8); die zeichenlänge festlegen kann. kann mir jemand befehle nennen mit denen ich die zeichenlänge herausbekomme zeichen abschneiden kann ... danke malwieder im voraus (beim durchstöbern des forums habe ich ncihts derartiges gefunden)
14. Oktober 200123 j Mit "var S: String;" wird S als WideString bzw. ANSIString definiert. Er hat somit keine bezeichnete Länge. Um die Länge der Zeichenkette in S herauszulesen, kann man die Funktion "length" verwenden: X:= Length(S); gibt demnach in X die Länge der Zeichenkette in S zurück ... Um einzelne Zeichen abzuschneiden gibt es m.W. keine eindeutige Funktion. Hier hilft "Copy" aber schon ganz gut: S:= Copy(S, 1, Length(S) -1); schneidet also ein Zeichen von S ab und gibt das Ergebnis in S zurück. Aber auch "StringReplace" ist nicht zu verachten: S:= StringReplace(S, 'x', '', [rfReplaceAll, rfIgnoreCase]); ersetzt einfach alle "x" und "X" in S durch leere Zeichen und löscht sie damit. Das Ergebnis wird dann in S zurückgegeben. Dann wäre da noch "Delete" welches Zeichen oder Zeichenketten löscht: Delete(S, 3, 5); löscht demzufolge also 5 Zeichen beginnend ab dem 3. und gibt das Ergebnis nach S zurück. Schließlich wären da wohl noch die Funktionen "TrimLeft", "TrimRight" und "Trim"; welche führende, nachlaufende sowie führende und nachlaufende Leerzeichen entfernt: S:= Trim(S); entfernt also führende und nachlaufende Leerzeichen, nicht aber Zeichen "in der Mitte". ... oha, ein paar sind's wohl doch wmg, dz <FONT COLOR="#a62a2a" SIZE="1">[ 14. Oktober 2001 04:56: Beitrag 2 mal editiert, zuletzt von doublezero ]</font>
14. Oktober 200123 j danke erstmal ... du scheinst ja mir delphi verheiratet zu sein ,-) ich schiebe (unwissenheit) die bei mir immer auf die englische hilfe ... die mir zu schafen macht ... bis --> ps.: ( du spezialist) wieso funktioniert das nicht: 1) If LIB_Ereignis.Items.capacity = 0 Then close; obwohl er If LIB_Ereignis.Items.capacity = 0 Then B_OK.caption:='x'} macht ( zum test ob die bedingung erfüllt wurde) ich will ein prog automatisch beenden wenn eine bedingung erfüllt ist ... wo ist der fehler :-) achja .. ich möchte eine *.exe aus einem quellcode heraus starten ... wenn du mir auf die spürünge helfen kannst ... :-) bis --> <FONT COLOR="#a62a2a" SIZE="1">[ 14. Oktober 2001 21:26: Beitrag 2 mal editiert, zuletzt von drob ]</font>
14. Oktober 200123 j Ratespiele ?! Was bitte ist denn "Lib_Ereignis" ?! Kannst du nicht besser sagen, was die Bedingung sein soll, die zur Terminierung des Programmes führen soll, und wir schauen dann gemeinsam, wie wir das hinbekommen ?! Abgesehen davon: Ein Programm wird unter Delphi nur dann korrekt beendet (inclusive der Speicherfreigaben, etc.) wenn du die Funktion Application.Terminate; aufrufst. Diese BASIC-(Un)Sitte einfach das Hauptfenster zu schließen führt hier wie dort nur zu mehr oder weniger großen Speicherlecks ... Um ein .exe-file auszuführen gibt es den Weg über die API-Funktion "shellExecute". Sie ist folgendermaßen deklariert: ShellExecuteA (führt Anwendung aus) hWnd: HWND Operation, Filename, Parameters, Directory: PChar, ShowCmd: Integer oder ShellExecuteW (druckt die angegebene Datei) hWnd: HWND Operation, Filename, Parameters, Directory: PChar, ShowCmd: Integer Für Operation setzt du wahlweise "open", "print" oder "explore" ein. ShowCmd setzt du auf 5(normal), 3 (maximiert) oder 2 (minimiert). Wahlweise kannst du aber auch die einfachere Funktion ShellExecuteExA (ausführen) oder ShellExecuteExW (drucken) verwenden: Dazu deklarierst du zunächst ein TSHELLEXECUTEINFO, dann setzt du es auf einen definierten Wert: FillChar(^TSHELLEXECUTEINFO, Sizeof(^TSHELLEXECUTEINFO), 0), setzt cbSize:= SizeOf(^TSHELLEXECUTEINFO); lpFile:= 'dein .exe-file' und nShow:= (wie bei ShowCmd) ShellExecuteEx(^TSHELLEXECUTEINFO); ... sollte es dann bringen Dazu brauchst du die "shell32.dll" und ein bisschen Fingerspitzengefühl. Einfacher geht es natürlich, wenn du dir eine Komponente besorgst, die diese ganzen API-Aufrufe für dich erledigt, und der du nur die .exe-Datei übergibst. wmg, dz ----------------- Programmieren ist wie Romane schreiben: Erst denkt man sich ein paar Typen aus, und dann muss man zusehen, wie man mit ihnen klarkommt.
20. Oktober 200123 j Ich führ 'ne EXE immer mit WinExec(command:String; Show:Integer) aus und außerdem ist diese BASIC-Unsitte nicht unbedingt Speicherfressend. Guck mal in die Implementation von TForm.Close (oder TCustomForm.Close). Wenn ich mich Richtig entsinne dürfte da eine Bedingung folgender Art zu finden sein: If Self = Application.Mainform Then Application.FRunning := false; wobei Application.FRunning auch von Application.Terminate auf diesen Wert gesetzt wird und der Procedure Application.Run als Abbruchbedingung in der Message-Verarbeitungsschleife dient... Hab ich jetzt genug Verwirrung geschaffen ... Wenn ja, schaut einfach mal die Unit Forms.pas an. Da gibst noch mehr solche schönen Sachen, die die Progger nicht immer glauben wollen ...
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.