AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Ferby-Fall II
Thema durchsuchen
Ansicht
Themen-Optionen

Ferby-Fall II

Ein Thema von ferby · begonnen am 19. Dez 2005 · letzter Beitrag vom 9. Jan 2006
Antwort Antwort
Seite 2 von 3     12 3      
ferby
Registriert seit: 15. Aug 2004
Hallo

Ich habe vor längeren schon ein Spiel progammiert,
dass ich Ferby-Fall nannte (zu finden unter www.Ferby.at).

Jetzt habe ich Ferby-Fall II fertig bekommen.
Das Spielprinzip ist zimlich gleich geblieben:
Ein Raumschiff muss Steine abschiessen, bevor diese hinter das Raumschiff gelangen.
Steuerung: Pfeiltasten und Leertaste.

Ich bitte um Testen des Programmes und Verbesserungsvorschläge.

Danke,
Ferby
Angehängte Dateien
Dateityp: exe install_ferby-fall_ii_704.exe (676,0 KB, 37x aufgerufen)
 
ferby

 
Delphi 2010 Enterprise
 
#11
  Alt 19. Dez 2005, 17:37
Hallo,

also bei mir kann mann das nicht ????

Ich weiß nicht einmal wie mann auf die Registry mit Delphi zugreift, da ich das noch nie gebraucht habe.
Und ich weiß was in meiner Programmierung steht, und da ist 100% nichts was in irgendeiner weiße die Registry verändert!



Wegen der Bildschirmfrequenz:

Ich verwende diese Procedure um die auflösung zu ändern, wiederherzustellen und um die Symbole am Desktop wieder zu richten.

function changescreen(Width, Height: Word; pfad: string): Boolean;
var
lpDevMode: TDeviceMode;
saveiconherstellen: boolean;
begin
saveiconherstellen:=false;

if width<>0 then
begin
ScreenAlt.x:=(screen.width);
ScreenAlt.y:=(screen.height);
ShellExecute(0,'open', PChar(pfad + 'saveicon.exe'),'"\s"', nil, SW_Show);
sleep(1000);
end
else
begin
saveiconherstellen:=true;
width:=ScreenAlt.X;
height:=ScreenAlt.Y;
end;

Result := EnumDisplaySettings(nil, 0, lpDevMode);
if Result then
begin
lpDevMode.dmFields := DM_PELSWIDTH Or DM_PELSHEIGHT;
lpDevMode.dmPelsWidth := Width;
lpDevMode.dmPelsHeight := Height;
Result := ChangeDisplaySettings(lpDevMode,
CDS_UPDATEREGISTRY) = DISP_CHANGE_SUCCESSFUL;
if saveiconherstellen then ShellExecute(0,'open', PChar(pfad + 'saveicon.exe'),'"\r"', nil, SW_Show);
end;

if not Result then
begin
MessageBeep(MB_ICONERROR);
MessageDlg('Fehler1' +#10#10+ 'Das Programm konnte die Auflösung nicht auf '+inttostr(width)+'x'+inttostr(height)+ ' umstellen.' +#10+ 'Es könnte sein das der Computer diese Auflösung nicht unterstützt' +#10+ 'Sollte der Computer diese Auflösung doch unterstüzen,' +#10+ 'dann stelle bitte die Auflösung manuel ein und starte das Spiel erneut.', mtError, [mbOK], 0);
Application.Terminate;
end;

end;



Ich habe diese Procedure nicht ganz alleine geschrieben, wo wird hier die Bildschirmfrequent verändert? Wie kann ich das verhindern, bzw wie kann ich die alte Bildschirmfrequenz wieder herstellen???


Danke für jede Hilfe,

Ferby



PS

Zitat:
Ich starte gerne das Spiel zum testen aus der ZIP heraus. Wenn es mir gefällt entzippe ich es in einen Ordner, wenn nicht versinkt der ZIP Ordner halt im TEMP-Ordner der periodisch gelöscht wird.
Ok, dass ergibt für mich Sinn, sorry, werde das nächste mal gleich eine ZIP bereitstellen,

mfg,
Ferby
  Mit Zitat antworten Zitat
ichbins

 
Delphi 2005 Personal
 
#12
  Alt 19. Dez 2005, 17:41
Wie schon gesagt, du solltest das Problem mit den 60 Hz noch lösen. Du könntest z.B. vor dem Start die Frequenz auslesen und beim beenden wieder setzen. Ich halte dieses 60-Hz-Geflimmere nicht aus...

Und mach UM GOTTES WILLEN den Timer etwas schneller...
Damit richtige Reaktionsgeschwindigkeit gefragt ist.

Ein Setup schreibt IMMER was in die Registry, selbst wenn du ihm ausdrücklich befiehlst, es nicht zu tun.
Ich denke, du verwendest Inno Setup. Wenn du dein eigenes Setup schreibst, könntest du dich drumherummanövrieren.
Michael Enßlin
  Mit Zitat antworten Zitat
ferby

 
Delphi 2010 Enterprise
 
#13
  Alt 19. Dez 2005, 17:49
Hallo,

ich habe mein Setup Programm (falls es ein Setup ist, ich weiß nicht wie Setup definiert ist) selbst mit Delphi geschrieben,
der hauptteil dieses Programmes besteht daraus:

Delphi-Quellcode:
procedure Tform1.daten;
var
i: byte;
Datei:TResourceStream;
begin

  for i:=1 to 2 do
  begin
    Datei:=TResourceStream.Create(hInstance,'wav' + inttostr(i),'EXEDATA');
    Datei.SaveToFile(pfadtmp + inttostr(i) + '.wav');
  end;

  progress.position:=50;
  progress.Refresh;

  for i:=1 to 8 do
  begin
    Datei:=TResourceStream.Create(hInstance,'mid' + inttostr(i),'EXEDATA');
    Datei.SaveToFile(pfadtmp + inttostr(i) + '.mid');
  end;

  progress.position:=70;
  progress.Refresh;

  Datei:=TResourceStream.Create(hInstance,'optionen','EXEDATA');
  Datei.SaveToFile(pfadtmp + 'optionen.ini');

  progress.position:=80;
  progress.Refresh;

  Datei:=TResourceStream.Create(hInstance,'score','EXEDATA');
  Datei.SaveToFile(pfadtmp + 'score.ini');



end;
Mein Installationsprogramm schreibt NICHTS in die Registry!


Und sonst steht darin nichts mehr was mit den Dateientpacken (Installation) zu tun hat.




Zitat:
Du könntest z.B. vor dem Start die Frequenz auslesen
Wie lese ich die Frequenz ab und stelle sie wieder her?
Ferby
  Mit Zitat antworten Zitat
Nils_13
 
#14
  Alt 19. Dez 2005, 18:02
Also du hast noch viel zu tun ...

Zur Frequenz: Verurasacht das, so dass man sich total besoffen fühlt und man, egal ob zurück geändert immer noch was nicht ganz stimmr ?
  Mit Zitat antworten Zitat
ichbins

 
Delphi 2005 Personal
 
#15
  Alt 19. Dez 2005, 18:14
Hier eine Funktion zum Verändern der Bildschirmauflösung (auch nicht ganz selber geschrieben (bzw. garnicht)):

Delphi-Quellcode:
function ChangeResolution(XResolution, YResolution, Depth: DWORD): BOOL;
var
  DevMode: TDeviceMode;
  i: Integer;
begin
  Result := False;
  i := 0;
  while EnumDisplaySettings(nil, i, DevMode) do
    with DevMode do
    begin
      if (dmPelsWidth = XResolution) and
        (dmPelsHeight = YResolution) and
        (dmBitsPerPel = Depth) then
        if ChangeDisplaySettings(DevMode, [CDS_FULLSCREEN]) =
          DISP_CHANGE_SUCCESSFUL then
        begin
          Result := True;
          SendMessage(HWND_BROADCAST, WM_DISPLAYCHANGE, SPI_SETNONCLIENTMETRICS, 0);
          Break;
        end;
      Inc(i);
    end;
end;
vllt geht es ja damit
Michael Enßlin
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#16
  Alt 19. Dez 2005, 18:18
Zitat von Luckie:
Nimm ein Zip-archiv und schreibndazu, ob irgendetwas im System geändert wiord oder wo anders als im Programmverzeichnis gespeichert wird.
Wenn du schon mein Programm umbenennst und so dessen Herkunft etwas verschleierst, dann sag wemfalls, wo mein Programm die Einstellungen speichert oder wird das von deinem Setup auch wieder gelöscht?
Michael
  Mit Zitat antworten Zitat
ferby

 
Delphi 2010 Enterprise
 
#17
  Alt 20. Dez 2005, 06:12
Hallo,

ich habe das Programm umbennant damit ich sofort weiß was dieses Programm tut,
warum soll ich die Herkunft verschleiern???
Mann braucht ja nur dein Programm zu öffnen und schon weiß mann wo es her kommt.
Nachdem du es Openscource gemacht hast würde ich, wenn ich es verschleiern würde,
einfach alles auf der Form löschen und neu compilen......

Nein der Ordner wird nicht gelöscht,
weil mein "Setup Programm" keine "Reinstallt" hat,
ich werde sobald ich Zeit habe ein Reinstallt Programm schreiben,

mfg,
Ferby
  Mit Zitat antworten Zitat
alzaimar

 
Delphi 2007 Enterprise
 
#18
  Alt 20. Dez 2005, 07:56
Zitat von ferby:
...
Ich bitte um Testen des Programmes und Verbesserungsvorschläge.
@ferby: Deinen Umgang erwünschter Kritik, die freundlich und sachlich vorgetragen wurde, solltest Du überdenken. Durch Kritik wird immer Dein Horizont erweitert. Es gibt Leute, die zahlen dafür (Schulungen, Training, Lehrgänge, etc.) und Du bekommst das hier umsonst. Anstatt einfach 'Danke' zu sagen, lamentierst Du hier rum.

Denk nächstes Mal daran, wenn Dir jemand auf Dein Bitten hin was erzählt.

Ich persönlich teste übrigens keine EXEn ohne Source, denn es sind in Foren wie Diesem auch schon Trojaner als vermeidlich zu testende Tools gepostet worden. Zumindest der Source sollte mitgeliefert werden. Deinem Tool nach zu urteilen stecken sowieso keine Geheimnisse drin.
  Mit Zitat antworten Zitat
Muetze1
 
#19
  Alt 20. Dez 2005, 08:40
Delphi-Quellcode:
Uses
  ShellAPI,
  registry; // auch wenn du es nicht wolltest, nun hast doch ein wenig Registry mit drinne - aber nur lesen...

....

Var
  ScreenAlt: TPoint; // diese solltest du schon haben
  ScreenAltFrequenz : Integer; // diese kommt neu hinzu

Function ChangeScreen(AWidth, AHeight: Word; AFrequenz: Integer; Const APfad: string): Boolean;
  // modified by Muetze1
Const
  ENUM_CURRENT_SETTINGS : Cardinal = Cardinal(-1);//$ffffffff; // = -1
Var
  lpDevMode: TDeviceMode;
  saveiconherstellen: boolean;
  lRegInfo : TRegistry;
Begin
  saveiconherstellen := false;

  If ( AWidth <> 0 ) Then
  Begin
    ScreenAlt.x := Screen.Width;
    ScreenAlt.y := Screen.Height;
    ScreenAltFrequenz := 0; // diese Variable noch definieren

    If ( EnumDisplaySettings(Nil, ENUM_CURRENT_SETTINGS, lpDevMode) ) Then
    Begin
      If ( ( lpDevMode.dmFields And DM_PELSWIDTH ) > 0 ) Then
        ScreenAlt.x := lpDevMode.dmPelsWidth;
      If ( ( lpDevMode.dmFields And DM_PELSHEIGHT ) > 0 ) Then
        ScreenAlt.y := lpDevMode.dmPelsHeight;
      If ( ( lpDevMode.dmFields And DM_DISPLAYFREQUENCY ) > 0 ) Then
        ScreenAltFrequenz := lpDevMode.dmDisplayFrequency
      Else If ( Win32Platform = VER_PLATFORM_WIN32_WINDOWS ) Then // Win9x/ME
      Begin
        lRegInfo := TRegistry.Create(KEY_READ);
        lRegInfo.RootKey := HKEY_CURRENT_CONFIG;
        Try
          If lRegInfo.OpenKey('\Display\Settings', False) Then
          Begin
            ScreenAltFrequenz := StrToIntDef(lRegInfo.ReadString('RefreshRate'), 0);
          End;
        Finally
          lRegInfo.CloseKey;
          lRegInfo.Free;
        End;
      End;
    End;

    ShellExecute(0, 'open', PChar(APfad + 'saveicon.exe'),'"\s"', nil, SW_Show);
    Sleep(1000);
  End
  Else
  Begin
    saveiconherstellen:=true;
    AWidth := ScreenAlt.X;
    AHeight := ScreenAlt.Y;
    AFrequenz := ScreenAltFrequenz;
  End;

  lpDevMode.dmFields := DM_PELSWIDTH Or DM_PELSHEIGHT;
  lpDevMode.dmPelsWidth := AWidth;
  lpDevMode.dmPelsHeight := AHeight;
  If ( AFrequenz > 20 ) Then // valid?
  Begin
    lpDevMode.dmDisplayFrequency := AFrequenz;
    lpDevMode.dmFields := lpDevMode.dmFields Or DM_DISPLAYFREQUENCY;
  End;
  Result := ChangeDisplaySettings(lpDevMode, CDS_UPDATEREGISTRY) = DISP_CHANGE_SUCCESSFUL;

  If saveiconherstellen Then
    ShellExecute(0,'open', PChar(APfad + 'saveicon.exe'),'"\r"', nil, SW_Show);

  If Not Result Then
  Begin
    MessageBeep(MB_ICONERROR);
    MessageDlg('Fehler1' +#10#10+ 'Das Programm konnte die Auflösung nicht auf '+inttostr(AWidth)+'x'+inttostr(AHeight)+ ' umstellen.' +#10+ 'Es könnte sein das der Computer diese Auflösung nicht unterstützt' +#10+ 'Sollte der Computer diese Auflösung doch unterstüzen,' +#10+ 'dann stelle bitte die Auflösung manuel ein und starte das Spiel erneut.', mtError, [mbOK], 0);
    Application.Terminate;
  End;
End;
So, damit sollte es klappen mit der Frequenz. MultiMon unter 98 und ME werden dabei nciht sauber unterstützt - diese Leutchen werden dann auch weiterhin die falsche Frequenz haben. Grundsätzlich könnte man da noch mit dem CDS_UPDATEREGISTRY rumspielen und deine Spieleauflösung nicht gleich fest abspeichern und dadurch die Wiederholfrequenz behalten.
Ansonsten kannst du nun auch eine Wiederholfrequenz für deine Spielauflösung angeben - da ist wieder die Frage, ob es der Monitor unterstützt. Die nicht vom Monitor unterstützten Auflösungen werden zwar beim EnumDisplaySettings() ausgeblendet (ab NT), aber beim setzen kann man auch nicht unterstützte setzen. Wenn die 60 Hz auf deiner Spielauflösung bisher nicht störten, dann gebe bei dem Frequenzparameter eine 0 an beim Aufruf.
Die Registry wird nun doch gebraucht für die Wiederholfrequenz unter 9x/ME - aber es wird nur gelesen...

Und grundsätzlich gilt meine Signatur!
  Mit Zitat antworten Zitat
Daniel G
 
#20
  Alt 20. Dez 2005, 11:00
Zitat von alzaimar:
Ich persönlich teste übrigens keine EXEn ohne Source, denn es sind in Foren wie Diesem auch schon Trojaner als vermeidlich zu testende Tools gepostet worden.
Da sehe ich eigentlich kein Problem, denn wenn ein Programm ins Netz will meckert meine Firewall eigentlich regelmäßig. Und nebenbei läuft NetworkActiv. Man kann ja schließlich nicht von jedem verlangen, dass er sein komplettes Programm offenlegt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz