Entwickler-Ecke
Freeware Projekte - Losungen - Freeware
AlexII - Fr 13.02.09 17:24
Titel: Losungen - Freeware
Hallo,
hab eine neue Freeware geschrieben, Losungen heißt das, also tägliches Wort Gottes. Es öffnet sich ein Formular mit nem Vers aus der Bibel.
Beim deinstallieren (im Menü) werden alle Registry Einträge und die .exe gelöscht.
Bin jedem dankbar, der das Prog testet.!
PS. Bitte nur das Prog testen und nicht über den Glauben diskutieren, danke!
freak4fun - Fr 13.02.09 17:29
Hallo,
das Programm sieht gut aus, der Link funktioniert auch und ich hab auf den ersten Blick keine Fehler gefunden. ;)
Sehr gut, weiter so! :zustimm:
AlexII - Fr 13.02.09 17:30
Mir wäre auch die Meinung von Vista.Leuten wichtig.
jaenicke - Fr 13.02.09 17:58
Ich habe es gerade unter Vista ausprobiert.
- Vermutlich durch die breiteren Ränder unter Vista ist es etwas zu tief unten, der untere Rand liegt hinter der Taskleiste.
- Ich würde ein Popup eher rechts unten als links unten erwarten, weil das eigentlich Standard ist.
- Den Vers (oder andere Internetseiten wie in "Info...") öffnen funktioniert nicht.
AlexII - Fr 13.02.09 21:20
jaenicke hat folgendes geschrieben : |
Den Vers (oder andere Internetseiten wie in "Info...") öffnen funktioniert nicht.[/list] |
Hm... kannst du mir vllt sagen wie ich URLs auch unter Vista öffnen kann?
jaenicke - Sa 14.02.09 01:48
Ich habe es mittlerweile einmal ausprobiert. Ich nehme an du benutzt ShellExecute? Ich habe den Rückgabewert einmal ausgewertet. Ergebnis: Zugriff verweigert.
Dann habe ich einfach mal Win + R gedrückt und
http://www.google.de/ eingegeben. Das hat nicht funktioniert. Irgendetwas hat da der IE8 RC1 bei der Installation verstellt. :autsch:
Dann habe ich das Image mit Vista für Virtual PC von MS heruntergeladen, da hat es funktioniert. Es lag also nicht an deinem Programm sondern an meinem Rechner. Tut mir leid... :flehan:
Dieses Image findest du hier, damit kannst du deine Programme selbst unter Vista testen, wenn auch nur ohne Aero:
http://www.microsoft.com/Downloads/details.aspx?FamilyID=21eabb90-958f-4b64-b5f1-73d0a413c8ef&displaylang=en
Dort funktioniert dein Programm allerdings trotzdem nicht. Grund: Irgendwoher bekommt das Programm den '01.01.2009' und das auch noch in dieser Form statt in der im System eingestellten (englischen). Dann kommt die Meldung im Anhang.
// EDIT:
Ja, gerade habe ich den FF als Standardbrowser festgelegt, dann wieder Chrome, jetzt geht es auch bei mir.
AlexII - Sa 14.02.09 02:32
Das Datum bzw. die Tage rechne ich so aus
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| function Losungstag(Datum: TDateTime): Integer; begin Result:=DaysBetween(Datum, StrToDate('01.01.' + IntToStr(Integer(YearOf(Now))))); end;
procedure TForm1.Button1Click(Sender: TObject); var z: Integer; begin z:=Losungstag(Now); end; |
Das funktioniert also nur im deutschen Windows bzw. wie da das Datumsformat eigestellt ist.
Kann mir jemand sagen wie ich den Code ändere und das Datum auf jedem Windows richtig ausgerechnet wird?
jaenicke - Sa 14.02.09 02:53
Delphi-Quelltext
1:
| z := DayOfTheYear(now); |
;-)
AlexII - Sa 14.02.09 15:32
jaenicke hat folgendes geschrieben : |
Dort funktioniert dein Programm allerdings trotzdem nicht. Grund: Irgendwoher bekommt das Programm den '01.01.2009' und das auch noch in dieser Form statt in der im System eingestellten (englischen). Dann kommt die Meldung im Anhang. |
Danke für die Mühe, hast mir hiermit sehr geholfen, vielen Dank!!!
PS Hab das inzwischen korrigiert.
AlexII - Sa 14.02.09 15:33
jaenicke hat folgendes geschrieben : |
Delphi-Quelltext 1:
| z := DayOfTheYear(now); | ;-) |
Vielen dank!!!
delphi10 - Sa 14.02.09 20:47
Unter W2K läuft es leider nicht - falls das noch für dich relevant ist. S. Fehlermeldung.
AlexII - Sa 14.02.09 21:17
delphi10 hat folgendes geschrieben : |
Unter W2K läuft es leider nicht - falls das noch für dich relevant ist. S. Fehlermeldung. |
Weiß du vllt woran es liegt?
delphi10 - Sa 14.02.09 23:04
delphi10 hat folgendes geschrieben : |
Unter W2K läuft es leider nicht - falls das noch für dich relevant ist. S. Fehlermeldung. |
Diese Meldung kam als erste. Such im Debugger die Adresse, vielleicht kommst du damit weiter.
Die von mir zuerst gepostete Fehlermeldung sah so selbstgemacht aus. Code87 Systemfehler, hast du eine fremde Unit eingebunden, die das absondern könnte?
Edit: Such mal den Text "Falscher Parameter"
jaenicke - So 15.02.09 02:05
Hmm, ich habe das gerade unter Windows 2000 mit SP4 getestet. Der Fehler tritt dort auch auf. Im Callstack steht u.a. RtlTraceDatabaseEnumerate, aber ansonsten kann ich da nicht viel zuordnen.
Du lädst ja (mit GIMP erzeugte :mrgreen:) PNGs mit den LMD-Tools, wenn ich das richtig sehe. Vielleicht machen die da etwas.
Dann hast du CreateParams überschrieben, was passiert da denn bei dir?
Wenn ich nämlich mit Delphi 7 (oder ist das Delphi 6 bei dir?) ein Programm erstelle, auch mit TJPEGImage, das du ja wohl auch benutzt, dann funktioniert das auch unter Windows 2000. Du musst also irgendetwas machen, was da Probleme macht. Und es muss etwas sein, was gleich beim Start da ist (eingebundene Units) bzw. passiert (FormCreate / CreateFarams).
AlexII - So 15.02.09 11:29
Hi,
ja du hast recht ich hab da eine TForm1.CreateParams Procedure.
Hab sie jetzt entfern, kannst du jetzt testen, ob es jetzt funkt? Fanke!
AlexII - So 15.02.09 11:49
jaenicke hat folgendes geschrieben : |
Du lädst ja (mit GIMP erzeugte :mrgreen:) PNGs mit den LMD-Tools, wenn ich das richtig sehe. Vielleicht machen die da etwas.
Dann hast du CreateParams überschrieben, was passiert da denn bei dir? |
Sag mal woher weiß du das?????????
delphi10 - So 15.02.09 14:47
AlexII hat folgendes geschrieben : |
Hi,
ja du hast recht ich hab da eine TForm1.CreateParams Procedure.
Hab sie jetzt entfern, kannst du jetzt testen, ob es jetzt funkt? Fanke! |
OK, läuft unter W2K. Aber nen Popup unten links? Na ja, ist im Prinzip egal.
jaenicke - So 15.02.09 15:26
AlexII hat folgendes geschrieben : |
ja du hast recht ich hab da eine TForm1.CreateParams Procedure.
Hab sie jetzt entfern, kannst du jetzt testen, ob es jetzt funkt? |
Wie auch
delphi10 schon sagte: Es läuft jetzt unter Windows 2000.
Auch unter Windows 98 und ME funktioniert es. Genauso unter Vista und Windows 7.
Nur unter Windows 95 läuft es zwar auch, aber es gibt beim Beenden einen Fehler, der sich nicht so einfach wegklicken lässt (immer neue Meldungen). Aber Windows 95 ist ja nicht mehr wichtig, da lohnt es sich kaum da nach dem Fehler zu suchen. ;-)
AlexII hat folgendes geschrieben : |
Sag mal woher weiß du das????????? |
An dem erzeugten Assemblercode. Z.B. sieht dein CreateParams so aus:
Quelltext
1: 2: 3: 4: 5: 6: 7:
| 00477130 53 push ebx 00477131 8BDA mov ebx, edx 00477133 8BD3 mov edx, ebx 00477135 E83668FDFF call 0044D970 0047713A 814B2400000200 or dword ptr [ebx+$24], $00020000 00477141 5B pop ebx 00477142 C3 ret |
Du fügst da mit or einen Wert hinzu, der hexadezimal den Wert $20000 hat. Welcher das ist, ließe sich dann auch nachschauen. Was mich etwas wundert: Du rufst das originale überschriebene CreateParams (per inherited) auf (rot markiert) bevor du den Style änderst (die nächste Zeile), das müsste eigentlich hinterher passieren, damit da auch der neue Wert übergeben wird, hätte ich gedacht.
Push und Pop sichern das ebx Register und stellen es wieder her, mov legt einen Wert von einem ins andere (hin und her hier^^) und ret springt aus dem aktuellen Unterprogramm zurück zur letzten Adresse (auf dem Stack).
Nun, und die PNGs und deren Inhalt stehen ja auch im Code drin, und im erweiterten Kommentarfeld steht bei einem davon drin "Created with The GIMP", bei einem anderen zusätzlich ein Copyrightvermerk. Öffne die Exe einfach in einem normalen Editor und such einmal nach "(c) 2004" und "Created with The GIMP". Dafür braucht man gar keinen Disassembler. ;-)
Ach ja, warum LMDTools fällt dir vermutlich an der Stelle dann auf. :mrgreen:
AlexII - So 15.02.09 17:49
delphi10 hat folgendes geschrieben : |
Aber nen Popup unten links? Na ja, ist im Prinzip egal. |
Was meinst du genau, irgendwie kopiere ich nicht? Wenn dann rechts unten vom Cursor. Ich werde das dann machen wenn es feststeht wo sich das Form öffnen wird. Werd also daran auf jeden Fall denken :-)
AlexII - So 15.02.09 17:59
Darf ich euch wieder mit der
CreateParams.Geschichte; stören?
Im Tutorial stand auch im Klammern, dass das für XP gedacht ist, deswegen hab ich das jetzt so gelöst.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| function IsXP: Boolean; var OS: TOSVERSIONINFO; begin OS.dwOSVersionInfoSize := SizeOf(TOSVERSIONINFO); GetVersionEx(OS); Result := (OS.dwPlatformId = VER_PLATFORM_WIN32_NT) and (OS.dwMajorVersion = 5) and (OS.dwMinorVersion = 1); end;
procedure TForm1.CreateParams(var Params: TCreateParams); const CS_DROPSHADOW = $00020000; begin if IsXP then begin inherited; Params.WindowClass.Style:=Params.WindowClass.Style or CS_DROPSHADOW; end; end; |
Ich prüfe also erstmal ob es sich um XP handelt, wenn ja wird die Schattierung ausgelöst.
Könnt ihr gucken, ob es jetzt so funktioniert und eventuell den Code optimieren?
Die Losungen.exe hab ich aktualisiert.
AlexII - So 15.02.09 18:15
jaenicke Hast du cool angestellt :D :!:
jaenicke - So 15.02.09 18:54
Ah, WindowClass.Style ist das was du setzt. Ich hatte schon Style und ExStyle ausprobiert und gesehen, dass das die falschen Adressen waren. Ich hatte dann aber keine Lust nachzuschauen was an der Adresse steht. :mrgreen:
Mit deinem Quelltext konnte ich das Problem eben reproduzieren. Dein Programm funktioniert nicht, auch nicht unter Vista, was daran liegt, dass du die geerbte Version auch nur noch unter XP aufrufst. Das muss aber immer passieren. Richtig sieht es dann so aus, das geht unter 95, 98 und 2000 wie auch unter Vista und der Effekt unter XP ist da (unter 95 liegt das vermutlich aber an was anderem, dass dein Programm nicht ging):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm1.CreateParams(var Params: TCreateParams);
function IsXP: Boolean; var OS: TOSVERSIONINFO; begin OS.dwOSVersionInfoSize := SizeOf(TOSVERSIONINFO); Result := GetVersionEx(OS) and (OS.dwPlatformId = VER_PLATFORM_WIN32_NT) and (OS.dwMajorVersion = 5) and (OS.dwMinorVersion = 1); end;
const CS_DROPSHADOW = $00020000; begin inherited CreateParams(Params); if IsXP then Params.WindowClass.Style := Params.WindowClass.Style or CS_DROPSHADOW; end; |
Vielleicht sollte ich an der Stelle einmal erklären was da eigentlich passiert, denn das scheint dir (deinem Quelltext nach zu urteilen) nicht klar zu sein.
Deine Formularklasse wird von TForm abgeleitet. Dort (bzw. genauer in TCustomForm) ist CreateParams bereits definiert. Du überschreibst jetzt diese Methode mit override. Das Resultat ist, dass statt der Original-CrateParams-Methode deine aufgerufen wird. Wenn du jetzt aber nicht auch das Original mittels inherited aufrufst, dann wird der entsprechende Code nie ausgeführt. Der ist aber notwendig. ;-)
AlexII - So 15.02.09 20:56
Kannst du mir vllt diese Procedure richtig anpassen, oder soll ich lieber das alles vergessen?
jaenicke - So 15.02.09 20:58
So wie ich es jetzt zuletzt gepostet habe, funktioniert es ja bei mir mit meinem Testprojekt. Das sollte schon richtig sein. ;-)
AlexII - So 15.02.09 22:57
Danke dir :D Man was hätte ich ohne dich gemacht, also rieeeeeeesen Dank!!!
An delphi10 auch viel Lob :)
AlexII - Di 11.08.09 10:30
Die Freeware ist endlich voll fertig! Bitte wieder testen.
der organist - Di 11.08.09 12:07
ist das eigentlich ne öffentliche Losung (Herrenhuter z.B.) oder ein vom Programm zufällig gewählter Vers?
AlexII - Di 11.08.09 15:55
Die Verse sind im Programm integriert und werden nicht zufällig ausgegeben, aber im Lernmodus werden sie zufällig ausgewählt.
der organist - Di 11.08.09 18:55
sprich die integrierten Verse (ich komm nicht drum herum ans Ableiten in Mathe zu denken :D) sind irgendwo offiziell bestimmt worden.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!