| Autor |
Beitrag |
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mi 24.05.06 14:04
Hi
Soviel ich weiß, kann man in DirectX keine Texte schreiben, oder? Ne andre Möglichkeit wären bmps, die ich dann als Texture drauflege. Aber wie kann ich die bmps zusammenfügen (z.B. Image1.Picture.LoadfromFile('X.bmp','I.bmp','O.bmp','N.bmp'); ).
Und wie kann ich das dann von TPicture nach IDIRECT3DTEXTURE8 konvertieren?
Xion
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mi 24.05.06 14:29
du benutzt directx direkt ? also du benutzt nicht undelphix ?
ansonsten musst du das mit bildern machen, aber ich glaube directx8 hat da schon eigene routinen für
|
|
Xion 
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mi 24.05.06 14:43
habe eine Funktion bei www.vb-fun.de/cgi-bi.../tipps/tip0401.shtml gefunden (DrawText). Die Funktion will haben:
hDC: HDC, lpString: PChar, nCount: integer, var lpRect: TRect, uFormat: Cardinal
was bedeuten die einzelnen Parameter?
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Xion 
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mi 24.05.06 15:18
habs jetzt so
Delphi-Quelltext 1: 2: 3: 4:
| Rect.Left:=100; Rect.Top:=100; DeskDC:=Form1.Handle; DrawText(DeskDC,'Hallo',Length('Hallo'),Rect,DT_LEFT); |
kompiliert zwar, zeigt aber nix an
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Stoney
      
Beiträge: 122
Mac OS X 10.6 "Snow Leopard", Ubuntu Linux 9.04, Mandriva 2010, Win 7, Win Vista, Win XP
Object Pascal (Turbo Delphi, FPC 2.2.4, Lazarus), C++ (Code::Blocks, XCode), Java (Eclipse)
|
Verfasst: Mi 24.05.06 15:31
Da fehlt noch die Länge und Breite des Rechtecks und die Umwandlung des Strings in einen PChar.
Zum Beispiel so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| Rect.Left:=100; Rect.Top:=100; Rect.Width := 100; Rect.Height := 100; DeskDC:=Form1.Handle; DrawText(DeskDC,PChar('Hallo'),Length('Hallo'),Rect,DT_LEFT); |
Edit:
Allerdings bezweifle ich, das Funktion den beschriebenen Effekt liefert, weil weder das DirectX-Surface noch die Schriftart oder die Farbe des Textes angegeben werden muss.
P.S.: Deine Signatur gefällt mir. 
|
|
Xion 
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mi 24.05.06 15:34
TRect hat seltsamerweise kein Width und Height  ich glaube das problem liegt mehr beim Form1.Handle; ich glaube das muss was andres sein
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Xion 
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Do 25.05.06 11:03
habs jetzt so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| DeskDC:=GetDC(DeskDC); Rect.Left:=100; Rect.Top:=100; Rect.Right:=200; Rect.Bottom:=200; DrawText(DeskDC,PChar('Hallo'),Length('Hallo'),Rect,DT_LEFT); |
aber:
1. es flackert ohne ende.
2. wie kann ich farbe+font ändern?
EDIT: zu 1: wie kann ich den Text auf den Device malen und nicht direkt?
EDIT2: hab folgendes bei Google gefunden:
SetTextColor(DeskDC,clLime); //SchriftFarbe
SetBkMode(DeskDC, TRANSPARENT); //Hintergrundfarbe
SelectObject(DeskDC, CreateFont(-12, 0, 0, 0, 0, 0, 0, 0, ANSI_CHARSET, //Schriftart
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH,
'Verdana'));
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Zuletzt bearbeitet von Xion am Do 25.05.06 11:34, insgesamt 1-mal bearbeitet
|
|
Stoney
      
Beiträge: 122
Mac OS X 10.6 "Snow Leopard", Ubuntu Linux 9.04, Mandriva 2010, Win 7, Win Vista, Win XP
Object Pascal (Turbo Delphi, FPC 2.2.4, Lazarus), C++ (Code::Blocks, XCode), Java (Eclipse)
|
Verfasst: Do 25.05.06 11:34
Xion hat folgendes geschrieben: |
1. es flackert ohne ende.
|
Probier mal in die FormCreate-Prozedur folgendes einzutragen:
Delphi-Quelltext 1:
| Form1.DoubleBuffered := True; |
Möglicherweise verschwindet dann das Flackern.
|
|
Xion 
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Do 25.05.06 11:36
flackert immernoch.
ist ja auch (mehr oder weniger) klar. ich male meine schrift hin und dann meine 2D Objekte drüber, oder umgekehrt. kann so ja nix werden. aber wie kann ich beides kombinieren?
EDIT: vielleicht könnte man ja die schrift irgendwie nach Texture konvertieren.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Stoney
      
Beiträge: 122
Mac OS X 10.6 "Snow Leopard", Ubuntu Linux 9.04, Mandriva 2010, Win 7, Win Vista, Win XP
Object Pascal (Turbo Delphi, FPC 2.2.4, Lazarus), C++ (Code::Blocks, XCode), Java (Eclipse)
|
Verfasst: Do 25.05.06 11:52
Xion hat folgendes geschrieben: | flackert immernoch.
ist ja auch (mehr oder weniger) klar. ich male meine schrift hin und dann meine 2D Objekte drüber, oder umgekehrt. kann so ja nix werden. aber wie kann ich beides kombinieren?
EDIT: vielleicht könnte man ja die schrift irgendwie nach Texture konvertieren. |
Ich kann mich vage daran erinnern, dass bei den Clootie-DirectX-Header Beispiele dabei sind, von denen eines zeigt, wie man einen Text ausgibt.
Kann aber sein, dass ich mir irre. Ich habe mich bisher nur wenig mit reiner DirectX-Programmierung auseinandergesetzt.
Von deiner Anfangsidee, jeden Buchstaben einzeln zu speichern und nacheinander zu laden wollte ich dir noch abraten: Das erzeugt zu viele Texturenwechsel, was sich negativ auf die Framesrate auswirkt.
|
|
Xion 
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Do 25.05.06 14:59
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| DeskDC:=GetDC(DeskDC); SetTextColor(DeskDC,QuadratText[A].Color); SetBkMode(DeskDC, TRANSPARENT); SelectObject(DeskDC,QuadratText[A].Font); if DrawText(DeskDC,PChar(QuadratText[A].Text),Length(QuadratText[A].Text),QuadratText[A].Rect,DT_NOCLIP)>0 then Windows.Beep(100,1) else Windows.Beep(2000,1) |
dieser Code ist interessant. Es piept abwechselnd hoch/tief => funktion funzt nicht/funzt. Nach ner Weile (ca. 10 sec) funzt die funtion gar nicht mehr. warum?
@Stoney: Der Link hat mir wenig geholfen, die Funktionen benötigen andere Units und mehr Kenntnisse als ich hab  Außerden brauchen die Texte ja gar nich 3D zu sein.
EDIT: Das ganze ist in einer for Schleife mit a:=0 to 19 entsprechend dem array.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Stoney
      
Beiträge: 122
Mac OS X 10.6 "Snow Leopard", Ubuntu Linux 9.04, Mandriva 2010, Win 7, Win Vista, Win XP
Object Pascal (Turbo Delphi, FPC 2.2.4, Lazarus), C++ (Code::Blocks, XCode), Java (Eclipse)
|
Verfasst: Do 25.05.06 16:29
Xion hat folgendes geschrieben: |
@Stoney: Der Link hat mir wenig geholfen, die Funktionen benötigen andere Units und mehr Kenntnisse als ich hab Außerden brauchen die Texte ja gar nich 3D zu sein. |
Orthogonale Projektion - und schon wird ein 3D-Text in Windeseile 2D
Wie meinst du andere Units? Die offiziellen DirectX-Header für Delphi/FreePascal sind von Clootie, und zwar seit DirectX 8. (Und scheinbar benutzt du auch DirectX 8.) Oder beziehst du dich auf etwas anderes ("Helferunits" z.B., die zusätzliche Funktionen bereitstellen oder wrappen)?
Hier hab ich noch ein paar weitere Links gesammelt:
SelfDXD: Eine Dokumentation für DirectX 8
DirectX8-Tutorial: Zeigt, wie eine einfache Objekte gezeichnet werden können. Darauf kannst du den Text zeichnen lassen.
Ich weiß zwar nicht genau auf welchen Wissensstand du dich befindest, aber DirectX direkt aufzurufen ist für Einsteiger nicht unbedingt einfach. Du benötigst auf jeden Fall Grundkenntnisse in Object Pascal. Eine Option ist es, statt der VCL die WinAPI zu benutzen. Grundkenntnisse über den sogenannten "Game-Loop" (API) oder wie ApplicationOnIdle (VCL) ausgenutzt werden kann, musst du auch haben; Renderevents in einen Timer zu platzieren ist groß fahrlässig.
Für einen Anfänger ist es besser, einen Wrapper oder ein Framework zu benutzen. Hier mal eine kleine Liste aktueller und guter DirectX-Wrapper für Delphi:
(Un)DelphiX
Asphyre
DanJetX
Die Wrapper machen solche Sachen wie Textausgabe unglaublich einfach.
|
|
Xion 
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Fr 26.05.06 14:39
Stoney hat folgendes geschrieben: |
Ich weiß zwar nicht genau auf welchen Wissensstand du dich befindest...
|
Noch ganz am Anfang
hab da 2 Komponenten runtergeladen (TWPool,TW9DirectX). ich versuche erstmal, da durchzusteigen
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Stoney
      
Beiträge: 122
Mac OS X 10.6 "Snow Leopard", Ubuntu Linux 9.04, Mandriva 2010, Win 7, Win Vista, Win XP
Object Pascal (Turbo Delphi, FPC 2.2.4, Lazarus), C++ (Code::Blocks, XCode), Java (Eclipse)
|
Verfasst: Fr 26.05.06 15:26
Xion hat folgendes geschrieben: |
hab da 2 Komponenten runtergeladen (TWPool,TW9DirectX). ich versuche erstmal, da durchzusteigen |
Hmm, ok. Dann benutzt du doch einen Wrapper: WDirectX.
Vielleicht solltest du dir als erstes das gesamte Komponentenpackage herunterladen: wdirectx.no-ip.com/
Auf dieser Seite findest du auch einige Beispiele dazu. Viel Spaß damit!
|
|
Xion 
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Fr 26.05.06 16:01
jup, werd ich haben
thx für die hilfe
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
|