| Autor |
Beitrag |
Horschdware
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: Di 30.03.04 21:36
High
ich habe (mal wieder) so ein seltsames Problem:
Ich habe eine Klasse TWriter erstellt. Im constructor wird eine TDXImagelist erstellt.
In einer Prozedur von TWriter werden Images aus der TDXImagelist auf ein DXDraw TWriter-externes DXDraw gezeichnet.
Es tut sich leider nichts.
ABER: Wenn ich ein TImage auf mein TForm1 lege und vor dem zeichnen ein bild aus der TDXImageList auf dieses Image hole, dann tut alles. Total konfus. Der Code dazu ist etwas lang aber hier mal das was ich so im groben meine:
(stark gekürzt)
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| TWriter = class(TObject) private WWriterImages : TDXImageList; WWriterImagePath : string; protected public procedure Write(text : string; PosX, PosY : integer); constructor Create(aForm: TComponent; aDXDraw: TDXDraw); end;
TForm1 = class(TForm) DXDraw: TDXDraw; private GJWriter : TWriter; public end; |
Delphi-Quelltext 1: 2: 3: 4: 5:
| constructor TWriter.Create(aForm: TComponent; aDXDraw: TDXDraw); begin WWriterImages := TDXImagelist.create(aForm); ... end; |
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TForm1.Edit1Change(Sender: TObject); begin DXDraw.surface.fill(500); GJWriter.Write(edit1.text, 20, 20); DXDraw.flip; end; |
so, und da tut sich leider auf dem dxdraw nichts.
wenn ich aber mal so was mache:
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin image1.Picture:=GJWriter.WWriterImages.Items[0].Picture; end; |
bevor ich zeichnen lasse, dann klappt alles.
was ist da los?? hab ichs wieder verpeilt??
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
|
Da_Knuddelbaer
      
Beiträge: 485
|
Verfasst: Mi 31.03.04 10:42
Nun, ich denke es tut sich schon etwas.
Ich habe das mal mit nem einzelnen bild nachgebaut und bei mir klappte das auf Anhieb mit dem DXDraw-Fenster.
Delphi-Quelltext 1: 2: 3:
| DXDraw1.Surface.Fill(500); DXImageList1.Items.Items[0].Draw(DXDraw1.Surface,10,10,0); DXDraw1.Flip; |
Nun, soweit wird die Fläche in ein Blau gelegt und die Bitmap gezeichnet. Eine kleine Erweiterung
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| DXDraw1.Surface.Fill(500); DXImageList1.Items.Items[0].Draw(DXDraw1.Surface,10,10,0);
with DXDraw1.Surface.Canvas do begin Brush.Style := bsClear; Font.Name := 'MS Sans Serif'; Font.Style := [fsBold]; Font.Color := clWhite; Font.Size := 8; Textout(50, 50, 'Test-Test-1-2-3'); Release; end; DXDraw1.Flip; |
für ein bissel Text auf dem DXDraw-Fenster. Bitte beachte: Der Befehl "Release" muss verwendet werden, ansonsten wird dein Flip nicht ausgeführt.
Ich weiss jetzt nicht ob es bei dir jetzt daran liegt, aber ich denke mal, dass wenn du den Edit1.Text auf das DXDraw-Fenster zeichnen willst, dass du da vllt das Release vergessen hast.
Cheerz,
Knuddelbaer
|
|
Horschdware 
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: Mi 31.03.04 12:15
Ja,
Delphi-Quelltext 1: 2: 3:
| DXDraw1.Surface.Fill(500); DXImageList1.Items.Items[0].Draw(DXDraw1.Surface,10,10,0); DXDraw1.Flip; |
funzt normalerweise auch ganz gut...
aber in diesem fall leider nicht.
hier ist eine Imagelist TForm1 zugehörig, die von einer Prozedur von TWriter dazu gebracht wird auf das DXDraw von TForm1 zu zeichnen.
Ich hab mal die ganz unit als Komponente compiliert und in mein Delphi eingebaut und da gehts jetzt auch gescheit.
Aber wenn ich diese Unit über den uses teil (nicht als komponente) einbinde, dann hakts wieder.
btw: das release habe ich beim zeichnen auf dxdraw noch nie gebraucht.
brauchst du das nur in diesem einen speziellen fall, oder...?
edit: nein, der text wird nicht als text ausgegeben. anhand des textes werden einzelne buchstaben eines FontSheets gelesen und mit denen dann auf dem dxdraw geschrieben. schaut ziemlich cool aus. vielleicht poste ich mal die fertige unit in die entsprechende sparte...
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
|
Da_Knuddelbaer
      
Beiträge: 485
|
Verfasst: Mi 31.03.04 13:24
Ich denke du benutzt eine zur Laufzeit erstellte DXImageList, die auf DXDraw zugewiesen ist? Dann funzt das obige eigentlich immer *g*
Das Release ist für das Canvas notwendig. Kein Release, kein Text.
Ausser natürlich du benutzt FontSheets, dann isset aber halt auch kein Text
Für FontSheets gibt es übrigens die Komponente DXFont mit SourceCode (damit man Sonderzeichen etc. noch mit einbauen kann). Mit der Kompo kannst du aus einer Bitmap, die beispielsweise in einer DXImageList liegt, genau das machen, was du vorhast.
|
|
Horschdware 
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: Mi 31.03.04 15:21
die imagelist bekommt als owner Form1 und als DXDraw DXDraw1.
release: hab ich mir schon gedacht..
das obige funzt immer: ja, eigentlich
DXFont: waaaaahh!!! dann hab ich das alles umsonst geschrieben?  *schlaginsgesichtundzubodenknock*
das ist aber nicht standardmäßig bei delphix dabei, oder?
ichkenn das zum beispiel gar nicht. ach mann... fies... 
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
|
Da_Knuddelbaer
      
Beiträge: 485
|
Verfasst: Mi 31.03.04 15:37
Tjoa, weiss selber net was da ganz am anfang bei dir kaputt ist. Ich meine, wenn die DXImageList mit DXDraw verknüpft ist, sollte das eigentlich funzen...
DXFont ist nicht standardmäßig bei DelphiX dabei. Die Kompo wurde von Michael Wilson als Beispiel eines DelphiX-Addons geschrieben und kann bei folgendem Link kostenlos mit Source runtergeladen werden.
DXFont
Du solltest die Komponente am besten noch mit Sonderzeichen etc. versehen. Diese Version dort kann lediglich Kleinbuchstaben ohne Sonderzeichen, falls du Großbuchstaben brauchst, solltest du die dann am besten auch noch reinsetzen.
Ein Beispiel ist mit dabei.
Ich hoffe ich konnte, auch wenn ich die eigentliche Frage nicht beantwortet habe, helfen
Knuddelbaer
|
|
Horschdware 
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: Mi 31.03.04 20:10
meine version kann upper alpha, lower alpha, zahlen und (fast alle) sonderzeichen.
insofern wars dann doch nicht ganz umsonst.
naja, das teil funktioniert soweit und der fehler den ich oben beschrieben habe tritt nun nicht mehr auf. ich weiss zwar nicht wieso, aber wenn ich ein bisschen zeit habe werde ich mal versuchen zurückzuverfolgen was da los war...
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
|
|