Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Tutorials und Kurse (https://www.delphipraxis.net/36-tutorials-und-kurse/)
-   -   Delphi DelphiX für Anfänger (1) (https://www.delphipraxis.net/36812-delphix-fuer-anfaenger-1-a.html)

Chegga 26. Dez 2004 13:28


DelphiX für Anfänger (1)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

hier mal mein versprochenes Tutorial. Los geht's!

Kapitel 1

Dieser Kurs soll euch den Umgang mit DelphiX etwas leichter machen.

Was ist DelphiX?

DelphiX ist eine Komponentengruppe von Hiroyuki Hori, die DirectX in Delphi 3, 4 und 7 einbindet. Durch diese Komponenten wird der Einstieg in die DirectX Programmierung erleichtert. DelphiX enthält folgende Komponenten:

(Siehe Anhang, "Komponenten.jpg")

Hier noch einmal beschrieben:

(Siehe Anhang, DXDraw.jpg)
DXDraw ist die Verknüpfung mit DirectDraw und Direct3D. In diesem Display werden die Programme/Spiele erstellt.

(Siehe Anhang, DXDib.jpg)
DXDib dient dazu, um ein Bild zu speichern (Device independent bitmap = DIB).

(Siehe Anhang, DXImageList.jpg)
DXImageList ist Liste von Bildern. Wird verwendet um Animationen zu erstellen.

(Siehe Anhang, DX3D.jpg)
DX3D ist eine Direct3D Komponente.

(Siehe Anhang, DXSound.jpg)
DXSound wird für die Sound Aufnahme verwendet oder zum abspielen. Verknüpfung mit DirectSound.

(Siehe Anhang, DXWave.jpg)
DXWave dient als Speicher für eine Wave Datei.

(Siehe Anhang, DXWaveList.jpg)
DXWaveList dient als Speicher für mehrere Wave Dateien.

(Siehe Anhang, DXInput.jpg)
DXInput ist eine Verknüpfung mit der DirectInput Komponente und wird verwendet, um Ereignisse von Eingabegeräten (Maus, Tastatur, Joystick) zu bekommen. Es können auch Feedback Effekte an spezielle Joysticks gesendet werden.

(Siehe Anhang, DXPlay.jpg)
DXPlay wird für die Kommunikation zwischen Computern (TCP/IP, IPX, Seriell, Modem) verwendet. Verknüpfung mit DirectPlay Komponente.

(Siehe Anhang, DXSpriteEngine.jpg)
DXSpriteEngine dient dazu, um Sprites zu erzeugen und zu steuern.

(Siehe Anhang, DXTimer.jpg)
DXTimer ist ein High-Speed Timer und dient als eine alternative zum TTimer.

(Siehe Anhang, DXPaintBox.jpg)
DXPaintBox ist eine DIB Version von TPicture.

Kapitel 2

Als erstes werde ich zeigen, wie man Bilder (noch keine Animationen) darstellen und bewegen kann.

Bilder darstellen

Zuerst wir mit DXDraw eine Fläche erstellt, auf der die Bilder angezeigt werden sollen. Dazu klickt man auf das Symbol und zieht dann auf dem Formular bei gedrückter linker Maustaste ein Rechteck. Danach fügt maneine DXImageList Komponente ein.
Stellt bei DXDraw unter Eigenschaften bei Align alClient ein.
Es sollte dann etwa so aussehen:

(Siehe Anhang, Form1.jpg)

Damit die DXImageList Komponente weiß, wo das Bild angezeigt werden sollen, muss man der Eigenschaft DXDraw "DXDraw1" (bzw. den Namen der DXDraw Komponente) zuweisen.
Nun laden wir ein Bild in die DXImageList Komponente. Dazu klicken wir auf die Eigenschaft Items. Folgendes Fenster öffnet sich:

(Siehe Anhang, ImageList.Item.jpg)

Um ein neues Bild hinzuzufügen, klickt man auf das Linke Symbol.
Mit der Eigenschaft "Picture" kann man ein Bild laden (Load-Button, Bild auswählen, TDIB-Button, OK). Gebt dem Bild den Name "Test" (Eigenschaft: Name). Man sieht nun in dem DXImageList-Fenster 0 - Test, d.h. unser Bild mit dem Namen "Test" hat die Item Nummer 0. Wenn man will, kann man eine Farbe als Transparent festlegen. Dazu wählt man in der Eigenschaft TransparentColor eine Farbe aus und schaltet die Eigenschaft Transparent auf True. In das Ereignis OnClick der DXDraw Komponente schreiben wir folgendes:

Delphi-Quellcode:
procedure TForm1.DXDraw1Click(Sender: TObject);
begin
  if not DXDraw1.CanDraw then
    Exit;
  DXImageList1.Items[0].draw(DXDraw1.Surface, 0, 0, 0);
  DXDraw1.Flip;
end;
Was bedeutet das?

Also, die erste Zeile bedeutet, dass Delphi sofort aufhört weiter zu machen, wenn er nichts auf dem DXDraw Feld zeichnen kann.
Die zweite Zeile ist wichtiger. Sie sagt, dass Delphi aus DXImageList das erste Bild (Item[0]) holen soll. In der Klammer steht, wo das Bild angezeigt werden soll (DXDraw1.Surface), die X-Koordinate, die Y-Koordinate und den PatternIndex (ist bei einem Bild immer 0; Dazu später mehr).
Zusammengefasst:

Code:
DXImageList1.Items[Nummer].draw(Wo, X-Koordinate, Y-Koordinate, PatternIndex);
Die Letzte Zeile bedeutet, dass DXDraw das Bild "flipped", d.h. die DXDraw Oberfläche neu zeichnet und das Bild darstellt.

Nun startet das Programm mit Drücken auf F9. Wenn ihr nun auf das schwarze Feld drückt, erscheint euer Bild.

Der nächste Beitrag folgt in Kürze.

MfG Marc

Hier geht es weiter zu DelphiX für Anfänger (2)

P.S.: Dieses Tutorial hat "MiGa" erstellt.
Es wurde von meiner Wenigkeit ein weing abgeändert.

[edit=Admin]Code-tags in Delphi-Tags geändert. ;-) Mfg, Daniel[/edit]
[edit=sakura] Auf Wunsch Links zu den Tutorial 2 hinzugefügt. Mfg, sakura[/edit]

MiniKeks 26. Dez 2004 13:55

Re: DelphiX für Anfänger (1)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also bei mir Funzt das ned. Guck bitte mal meinen Anhang an.
(Habs ein bissl anderst gemacht)

Grüsse MiniKeks

malo 26. Dez 2004 14:00

Re: DelphiX für Anfänger (1)
 
Wenn ich mich nicht völlig irre, ist das genau das Tutorial vom ehemaligen Delphi-treff, nur halt, dass die bilder jetzt alle im anhang sind und nicht sofort angezeigt werden... oder irre ich mich da? :gruebel:

malo 26. Dez 2004 14:03

Re: DelphiX für Anfänger (1)
 
Zitat:

Zitat von MiniKeks
Also bei mir Funzt das ned. Guck bitte mal meinen Anhang an.
(Habs ein bissl anderst gemacht)

Grüsse MiniKeks

Also, ich habs mir jetzt nur grob angeguckt, aber du hast keine Procedure im DXTimer OnTimer-Event, sondern im OnActivate... beim DXTimer öffnet sich nämlich nicht bei Doppelklick auf die Komponente das OnTimer-Event, sondern das OnActivate... liegt vllt daran ;)

Chegga 26. Dez 2004 14:08

Re: DelphiX für Anfänger (1)
 
Hi MiniKeks,

hast du mit meinem Tut gearbeitet?
In deinem Programm ist ein Timer, der Quellcode ist auch anders, bei Transparent sollte True stehen und bei Transparent Color solltest du
eine Farbe auswählen. Lies dir am besten mein Tut noch einmal durch.

MfG Marc

P.S.: Schönes Bild! :mrgreen:

Die Muhkuh 26. Dez 2004 14:09

Re: DelphiX für Anfänger (1)
 
Hi,

@Malo

geht aber auch im OnActivate. Es liegt daran das es Jpeg ist.

MiniKeks 26. Dez 2004 14:10

Re: DelphiX für Anfänger (1)
 
Gell malo, lies nochmal :D
Ich habs wenigstens auf anhieb verstanden ;)

hehe

Gruss MiniKeks

malo 26. Dez 2004 14:11

Re: DelphiX für Anfänger (1)
 
Zitat:

Zitat von Spider
Hi,

@Malo

geht aber auch im OnActivate. Es liegt daran das es Jpeg ist.

Wie gesagt, ich habs mir nur flüchtig angesehen und hatte keine Lust den Quelltext richtig durchzulesen (jaja, ich faule Nuss). Das war nur das, was mir sofort aufgefallen ist ;)

mimi 26. Dez 2004 16:42

Re: DelphiX für Anfänger (1)
 
Delphi-Quellcode:
procedure TForm1.DXDraw1Click(Sender: TObject);
begin
  if not DXDraw1.CanDraw then
    Exit;
  DXImageList1.Items[0].draw(DXDraw1.Surface, 0, 0, 0);
  DXDraw1.Flip;
end;
damit das funktioniert müsste es so geänder werden:

nimm eine DXTimer komponente stelle denn interval auf 0 ein und und packe in das OnTimer ereignis diesen code von oben rein dann sollte es funktionieren. und wenn du eine jpeg einbindes musst du die unit jpeg in die uses mit einbinden. der erste interger in der draw funktion ist die x postion und der zweite die y postion und der dritte ist der pattenindex(solltes du mehre bilder in einer grafik haben sollten sie auch alle gleich groß sein dann musst du in DXListItems PattenW*... und PattenH entpsrechend einstelln. achja und vergesse nich die DXListImage mit der DXdraw komponente zu verknüpfen !

neoCorteX 10. Mär 2005 17:55

Re: DelphiX für Anfänger (1)
 
Frage:
Ich habe unter Delphi 7 Personal auf W2k SP4 und WXP Pro SP2 DelphiX (für D7) installiert, und dies auch ohne Fehlermeldungen geschafft. Leider funktioniert das Codebeispiel trotzdem nicht. Es lässt sich compilen, das OnCLick Ereignis reagiert auch entsprechend, blöderweise werden die DXDraw-Funktionen jedoch quasi ignoriert. Es ist nicht mehr als eine schwarze Zeichenfläche zu sehen. Any Ideas?

Die Muhkuh 10. Mär 2005 17:57

Re: DelphiX für Anfänger (1)
 
Hi,

schreib mal statt:

Delphi-Quellcode:
procedure TForm1.DXDraw1Click(Sender: TObject);
begin
  if not DXDraw1.CanDraw then
    Exit;
  DXImageList1.Items[0].draw(DXDraw1.Surface, 0, 0, 0);
  DXDraw1.Flip;
end;
lieber:

Delphi-Quellcode:
procedure TForm1.DXDraw1Click(Sender: TObject);
begin
  if not DXDraw1.CanDraw then
    ShowMessage('Kann nicht zeichnen');
  DXImageList1.Items[0].draw(DXDraw1.Surface, 0, 0, 0);
  DXDraw1.Flip;
end;
Wenn nun die Meldung "Kann nicht zeichnen" kommt, stimmt etwas mit deinem DirectX nicht. Vielleicht hast du's ja abgeschlatet.

neoCorteX 10. Mär 2005 20:33

Re: DelphiX für Anfänger (1)
 
Vorsicht Missverständnis!

Ich habe ja nicht das Problem, dass ein CanDraw mir False gibt und deshalb ein Exit; getriggert wird. Das Problem ist einfach, dass nichts passiert. Da ich auf dem Rechner normalerweise auch DirectX Anwendungen benutze, glaube ich weniger, dass es daran liegt das dieses deaktiviert ist. Auf der XP Kiste ist allerdings irgendein 9er.

Könnte mir Debug da weiter helfen?
(Ka wie der anzuwenden ist...)

malo 10. Mär 2005 20:53

Re: DelphiX für Anfänger (1)
 
Zitat:

Zitat von neoCorteX
Vorsicht Missverständnis!

Ich habe ja nicht das Problem, dass ein CanDraw mir False gibt und deshalb ein Exit; getriggert wird. Das Problem ist einfach, dass nichts passiert.

Das ist es ja. Es könnte ja sein, dass es einfach nicht zeichnen KANN. Und dann wird die Prozedur abgebrochen und es wird nichts angezeigt. Das sieht dann für dich so aus, als würde nichts passieren (was im Grunde auch so ist -> an der if-Abfrage kommt das Programm nicht vorbei). ;)

Oder hast du Spiders Rat schon befolgt, und das einfach mal ausprobiert?

neoCorteX 11. Mär 2005 08:58

Re: DelphiX für Anfänger (1)
 
Zitat:

Zitat von malo
Zitat:

Zitat von neoCorteX
Vorsicht Missverständnis!

Ich habe ja nicht das Problem, dass ein CanDraw mir False gibt und deshalb ein Exit; getriggert wird. Das Problem ist einfach, dass nichts passiert.

Das ist es ja. Es könnte ja sein, dass es einfach nicht zeichnen KANN. Und dann wird die Prozedur abgebrochen und es wird nichts angezeigt. Das sieht dann für dich so aus, als würde nichts passieren (was im Grunde auch so ist -> an der if-Abfrage kommt das Programm nicht vorbei). ;)

Oder hast du Spiders Rat schon befolgt, und das einfach mal ausprobiert?

Genau das habe ich auf beiden Systemen ausprobiert. Ich bekomme schlichtweg keine Meldung, es passiert aber auch nichts. Ich bekomme ja sogar eher die eegenteilige Meldung:
Delphi-Quellcode:
if dxdraw1.candraw then
showmessage('Currywurst');
Das gibt entsprechend "Currywurst" zurück.

Gibt es den irgendwelche Einschränkungen was das Bildformat betrifft? Ich habe es mit einer einfachen und kleinen Bitmap (bmp) getestet (in Paint kurz ein paar Flecken Farbe verteilt; Farbe auf weiß).

maximov 11. Mär 2005 10:12

Re: DelphiX für Anfänger (1)
 
Moin,

habt ihr die ImageList mit DXDraw verlinkt? ..wenn nicht kann es nicht gehen. Nur so als anmerkung :stupid:

Minz 11. Mär 2005 10:17

Re: DelphiX für Anfänger (1)
 
Hallo,

ich habe mir dein Beispiel jetzt nicht angesehen, aber könnte es sein, dass bei deiner Picture Eigenschaft TJPEGImage steht? Was ich im Tutorial nicht gelesen habe, ist dass man beim Ladevorgang des Bildes TDIB anklicken muss, damit das Bild später angezeigt wird.

Vielleicht war das schon alles.

Gruß Minz

neoCorteX 11. Mär 2005 12:50

Re: DelphiX für Anfänger (1)
 
Ich habe den im Tutorial verwendeten Timer der DelphiX Komponenten verwendet. Daran sollte es also nicht liegen, oder meinst du noch etwas anderes?

maximov 11. Mär 2005 13:14

Re: DelphiX für Anfänger (1)
 
Und was ist hiermit? ...hast du das wenigstens überprüft?

Zitat:

Zitat von maximov
Moin,

habt ihr die ImageList mit DXDraw verlinkt? ..wenn nicht kann es nicht gehen. Nur so als anmerkung :stupid:


Chegga 11. Mär 2005 13:34

Re: DelphiX für Anfänger (1)
 
Hi,
Zitat:

Zitat von neoCorteX
Ich habe den im Tutorial verwendeten Timer der DelphiX Komponenten verwendet. Daran sollte es also nicht liegen, oder meinst du noch etwas anderes?

:roll:
In diesem Tutorial habe ich keinen Timer verwendet.
Vielleicht liest du dir in ruhe noch einmal alles genau durch. :wink:
Zitat:

Zitat von Minz
ich habe mir dein Beispiel jetzt nicht angesehen, aber könnte es sein, dass bei deiner Picture Eigenschaft TJPEGImage steht? Was ich im Tutorial nicht gelesen habe, ist dass man beim Ladevorgang des Bildes TDIB anklicken muss, damit das Bild später angezeigt wird.

Ich habe fogendes geschrieben!:
Mit der Eigenschaft "Picture" kann man ein Bild laden (Load-Button, Bild auswählen, TDIB-Button, OK).

Zitat:

Zitat von maximov
habt ihr die ImageList mit DXDraw verlinkt? ..wenn nicht kann es nicht gehen.

Ich habe folgendes geschrieben!:
Damit die DXImageList Komponente weiß, wo das Bild angezeigt werden sollen, muss man der Eigenschaft DXDraw "DXDraw1" (bzw. den Namen der DXDraw Komponente) zuweisen.


Also bitte noch mal das Tutorial lesen und sich an die Anleitung halten. :zwinker:
(Es steht alles (sehr) ausführlich drin.)

MfG Marc

P.S.: Für weitere interne Fragen/Probleme wäre vielleicht ein neuer Thread in Multimedia nicht schlecht,
sonst hat das hier bald nicht mehr viel mit Tutorials und Kurse zu tun. Thx!

neoCorteX 11. Mär 2005 13:55

Re: DelphiX für Anfänger (1)
 
Zitat:

Zitat von Chegga
Hi,

[..]
Also bitte noch mal das Tutorial lesen und sich an die Anleitung halten. :zwinker:
(Es steht alles (sehr) ausführlich drin.)

MfG Marc

1. Der Timer hat damit nichts zu tun. Ob ich über ein OnClick gehe oder über einen Timer sollte egal sein. Fakt ist, dass ich es zu Hause immer noch nicht hinbekommen habe. Auf W98 mit D5 und DX4D5 geht es inzwischen. Allerdings habe ich inzwischen leichte Zweifel daran, ob mir das überhaupt bei der Lösung meines Problems hilft.

(weitere Codebeispiele sind leider sehr rar und ich habe sehr sehr wenig Zeit (die englische Hilfe des Autors ist leider auch nicht der Hit;))

2. Immer nur jemanden dazu verdonnern, dass er das Tutorial lesen soll ist zwar nett für die #Postings aber ansonsten wenig hilfreich.

Zitat:

Zitat von maximov
Und was ist hiermit? ...hast du das wenigstens überprüft?

Jein - hier, an den alten Systemen, hat das geholfen. Das Problem ist jedoch, dass es doch eigentlich mindestens ein Warning geben müsste wenn ich versuche Dinge miteinadner zu verknüpfen die miteinander nichts zu tun haben... naja - Delphi ist halt ein notwendiges Übel...;)

Thema jedenfalls erledigt und gut is.

Neutral General 11. Mär 2005 14:05

Re: DelphiX für Anfänger (1)
 
Zitat:

Zitat von neoCorteX
Zitat:

Zitat von maximov
Und was ist hiermit? ...hast du das wenigstens überprüft?

Jein - hier, an den alten Systemen, hat das geholfen. Das Problem ist jedoch, dass es doch eigentlich mindestens ein Warning geben müsste wenn ich versuche Dinge miteinadner zu verknüpfen die miteinander nichts zu tun haben... naja - Delphi ist halt ein notwendiges Übel...;)

Thema jedenfalls erledigt und gut is.

DXDraw und die Imagelist haben sehr wohl was miteinander zu tun und statt Warnungen wird es höchstens funktionieren :roll:
Wenn man beide nicht verbindet das funktionierts nicht.

neoCorteX 11. Mär 2005 14:33

Re: DelphiX für Anfänger (1)
 
Zitat:

Zitat von Neutral General
Zitat:

Zitat von neoCorteX
Zitat:

Zitat von maximov
Und was ist hiermit? ...hast du das wenigstens überprüft?

Jein - hier, an den alten Systemen, hat das geholfen. Das Problem ist jedoch, dass es doch eigentlich mindestens ein Warning geben müsste wenn ich versuche Dinge miteinander zu verknüpfen die miteinander nichts zu tun haben... naja - Delphi ist halt ein notwendiges Übel...;)

Thema jedenfalls erledigt und gut is.

DXDraw und die Imagelist haben sehr wohl was miteinander zu tun und statt Warnungen wird es höchstens funktionieren :roll:
Wenn man beide nicht verbindet das funktionierts nicht.

Nein, ich meine abermals etwas anderes. Natürlich haben beide Teile etwas miteinander zu tun, gar keine Frage. Ich bezog mich auf den allgemeinen Fall in welchem Delphi in der Regel so nett ist und ne Warnung ausspuckt..

Es läuft jetzt auch auf den beiden anderen Systemen. Dx Pfade angepasst und nun lüppt es... (for whatever reason...)

maximov 11. Mär 2005 14:46

Re: DelphiX für Anfänger (1)
 
Zitat:

Zitat von neoCorteX
...
Nein, ich meine abermals etwas anderes. Natürlich haben beide Teile etwas miteinander zu tun, gar keine Frage. Ich bezog mich auf den allgemeinen Fall in welchem Delphi in der Regel so nett ist und ne Warnung ausspuckt..

Das hat nix mit Delphi zu tun! Höchstens mit dem programmierer der komponente. Also mach delphi nicht für deine oder Horis fehler verantwortlich ;)

Minz 12. Mär 2005 02:59

Re: DelphiX für Anfänger (1)
 
@neoCortex

ich habe von einer Picture-Eigenschaft, TJPEGImage und TDIB und Ladevorgang gesprochen. Das hat mit deinem erwähnten Timer so ziemlich nichts zu tun. Die gemeinte Picture-Eigenschaft findest du bei der DXImageList, wenn du das Bild dort festlegst bzw. lädst...

vlees91 1. Apr 2005 18:26

Re: DelphiX für Anfänger (1)
 
delphix ist auch für delphi 5 und 6 :evil:

Die Muhkuh 1. Apr 2005 18:34

Re: DelphiX für Anfänger (1)
 
Zitat:

Zitat von vlees91
delphix ist auch für delphi 5 und 6 :evil:

Und für Delphi 3, (Delphi 4), Delphi 7, Delphi 2005 ;)

vlees91 1. Apr 2005 18:38

Re: DelphiX für Anfänger (1)
 
3,4 und 7 hat er schon selbst genannt.

Die Muhkuh 1. Apr 2005 18:40

Re: DelphiX für Anfänger (1)
 
Zitat:

Zitat von vlees91
3,4 und 7 hat er schon selbst genannt.

Wer lesen kann, ist klar im Vorteil :wall:

Metatron220 22. Jan 2006 11:53

Re: DelphiX für Anfänger (1)
 
Wo finde ich DelphiX für Delphi 2005?

3_of_8 22. Jan 2006 12:00

Re: DelphiX für Anfänger (1)
 
Gibts nur als UnDelphiX. Dafür einfach mal die Suchfunktion bemühen.

Tumm 3. Apr 2007 19:03

Re: DelphiX für Anfänger (1)
 
wo kann ich DelphiX denn downloaden?


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz