Autor Beitrag
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: 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)

ausblenden 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;



ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
constructor TWriter.Create(aForm: TComponent; aDXDraw: TDXDraw);
begin
  WWriterImages := TDXImagelist.create(aForm);
...
end;



ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Edit1Change(Sender: TObject);
begin
  DXDraw.surface.fill(500);
  GJWriter.Write(edit1.text, 20, 20);   // das ziel Form1.DXDraw.Surface wurde wo anders reingehauen
  DXDraw.flip;
end;


so, und da tut sich leider auf dem dxdraw nichts.

wenn ich aber mal so was mache:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: 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.

ausblenden 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

ausblenden 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;  // MUSS HIER HIN!
  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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: Mi 31.03.04 12:15 
Ja,

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: 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 :wink:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: 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? :shock: :shock: *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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: 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... :shock:

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: 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