AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi bitblt() + Windows XP Problem
Thema durchsuchen
Ansicht
Themen-Optionen

bitblt() + Windows XP Problem

Ein Thema von arnoldo · begonnen am 18. Dez 2002 · letzter Beitrag vom 29. Dez 2002
Antwort Antwort
arnoldo

Registriert seit: 8. Dez 2002
Ort: Berlin
131 Beiträge
 
Delphi 7 Personal
 
#1

bitblt() + Windows XP Problem

  Alt 18. Dez 2002, 18:18
Hallo miteinander,

ich habe ein Spiel programmiert in dem u.a. Schnee nach unten rieselt.
Die von mir verwendeten Schneeflocken-Bitmaps muessen tatuerlich teilweise transparent sein (wegen der Form) und damit das ganze recht flott vonstatten geht kopiere ich sie mit bitblt() auf den Schirm, nur habe ich das Problem das das ganze unter Windows ME ganz gut funktioniert, aber unter WinXP werden einfach die Schneeflocken gar nicht dargestellt.
Woran könnte das liegen? Bzw. welche Alternativen habe ich?
Hier die betreffenen Code-Zeilen (aus einer Unit):

Code:
function TransparentDraw(ZielDC:Word;zLeft,zTop,
                         zWidth,zHeight:Integer;
                         QuellDC,MaskeDC:Word;qLeft,qTop:Integer)
                         :Boolean;
begin
  Result:=BitBlt(ZielDC,zLeft,zTop,zWidth,
                 zHeight,MaskeDC,qLeft,qTop,SrcAnd);
  Result:=Result and BitBlt(ZielDC,zLeft,zTop,zWidth,
                            zHeight,QuellDC,qLeft,qTop,SrcInvert);
end;
Danke im voraus

P.S. im Anhang ist das Spiel
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#2
  Alt 18. Dez 2002, 19:44
Hi arnoldo,

ein hDC ist ein Handle und Handles sind vom Typ Longword (also 32 bit ohne Vorzeichen). Du benutzst allerdings Words (16 bit ohne Vorzeichen) dafür. Ich könnte mir gut vorstellen, dass Windows NT/2000/XP etwas dagegen hat, dass die Zahl der DCs 65.536 überschreitet (mein Verdacht ist, dass das unter Windows 95/98/ME gar nicht geht) und du dann nur die niedrigeren 16 bit des 32 bit-Handles benutzst.

Lange Rede, kurzer Sinn: Schreib deine Funktionendeklaration wie folgt um, benutze nur noch Longwords (oder HDCs) für Device-Context-Handles und schau, ob's funktioniert.

function TransparentDraw(ZielDC: Longword; zLeft, zTop, zWidth, zHeight: Integer; QuellDC, MaskeDC: Longword; qLeft, qTop: Integer): Boolean; MfG,
d3g
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3
  Alt 18. Dez 2002, 20:22
Oder am besten gleich HDC. So ein ähnliches Problem hatte ich auch schon mal mit Regions. Unter Win9x/ME lief das Programm einwandfrei. Jedoch kam unter Win2000 (damals gab es noch kein XP) kam eine Bereichsüberschreitung. Ein Integer kann eben nur 2 Mrd. im positiven fassen und Win2000 lieferte eben einen 3 Mrd. Wert.
  Mit Zitat antworten Zitat
arnoldo

Registriert seit: 8. Dez 2002
Ort: Berlin
131 Beiträge
 
Delphi 7 Personal
 
#4
  Alt 18. Dez 2002, 20:30
DAAAAAAAANKE!!! Es funktioniert nun

Ein wirklich Klasse Forum - hier wird einem geholfen.

für alle die es interessiert hier die funktionierende Version:
http://www.people.freenet.de/steffen...ermine1.0a.zip
  Mit Zitat antworten Zitat
Benutzerbild von City Light
City Light

Registriert seit: 17. Sep 2002
314 Beiträge
 
#5
  Alt 25. Dez 2002, 01:52
Hi Arnoldo!

Ich würde gern wissen wie du das gemacht hast das mit den Schneeflocken auf dem schirm....sieht gut aus! will auch haben

könntest du mir da nicht auf die springe helfen ,habe nähmlich null ahnung.
Bis bald man liest sich
Tino
  Mit Zitat antworten Zitat
arnoldo

Registriert seit: 8. Dez 2002
Ort: Berlin
131 Beiträge
 
Delphi 7 Personal
 
#6
  Alt 29. Dez 2002, 10:15
Hallo city light,

schön das Du Dich für die Flocken interessierst, am besten ich werde
mal ein kleines Beispiel ranhängen (mit code). Das erklärt sich dann
schon alles von selbst.
Im prinzip werden ganz einfach die Koordinaten einer jeden Flocke in
einem Array festgehalten und per timer verändert. Auf den Bildschirm
wird das ganze per TImage und BitBlt gebracht.

Gruss Steffen
Angehängte Dateien
Dateityp: zip schneefall.zip (3,2 KB, 27x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:22 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