Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Canvas.Handle via GetDC(Panel1.Handle) (https://www.delphipraxis.net/114555-canvas-handle-via-getdc-panel1-handle.html)

EWeiss 27. Mai 2008 11:45


Canvas.Handle via GetDC(Panel1.Handle)
 
Glaube nicht das ich blöd bin

PaintBox1.canvas.Handle = Result: Handle Device Contex(PaintBox1)
GetDC(Panel1.Handle) = Result: Handle Device Contex(Panel1)

jetzt sag mir mal einer warum das eine funktioniert und das andere nicht.

gruss Emil

sirius 27. Mai 2008 11:59

Re: Canvas.Handle via GetDC(Panel1.Handle)
 
Bitte, was hast du da geschrieben?

EWeiss 27. Mai 2008 12:08

Re: Canvas.Handle via GetDC(Panel1.Handle)
 
Zitat:

Zitat von sirius
Bitte, was hast du da geschrieben?

verstehe deine Frage nicht.

PaintBox1.canvas.Handle = HDC oder ?
GetDC ermittelt das Handle eines Anzeige-Gerätekontextes [DC] für den Clientbereich eines Fensters.

dürfte in beiden fällen das gleiche sein oder ?

Warum geht das eine und das andere nicht ?
Auf das ermittelte DC über GetDC kann ich zeichnen auf PaintBox1 nicht ?

gruss Emil

sirius 27. Mai 2008 12:40

Re: Canvas.Handle via GetDC(Panel1.Handle)
 
Ich kann auf beidem zeichnen:
Delphi-Quellcode:
  dc:=getdc(Panel1.Handle);
  rectangle(dc,10,10,40,40);
  releasedc(Panel1.Handle,dc);

  dc:=Paintbox1.Canvas.Handle;
  rectangle(dc,10,10,40,40);

EWeiss 27. Mai 2008 12:55

Re: Canvas.Handle via GetDC(Panel1.Handle)
 
Zitat:

Zitat von sirius
Ich kann auf beidem zeichnen:
Delphi-Quellcode:
  dc:=getdc(Panel1.Handle);
  rectangle(dc,10,10,40,40);
  releasedc(Panel1.Handle,dc);

  dc:=Paintbox1.Canvas.Handle;
  rectangle(dc,10,10,40,40);

Dann bitte warum gehts bei dir und nicht bei mir :wall:
Beides das gleiche..

wobei du dir unten das dc als Variable hättest sparen können
denn Paintbox1.Canvas.Handle ist DC

Delphi-Quellcode:
rectangle(Paintbox1.Canvas.Handle,10,10,40,40);
Aber trotzdem geht nur die eine variante bei mir.
Mit GetDc über das Window Handle von Panel1

gruss Emil

DeddyH 27. Mai 2008 12:59

Re: Canvas.Handle via GetDC(Panel1.Handle)
 
Bei mir geht das aber auch. Vielleicht liegt der Fehler ganz woanders?

[edit] Glückwunsch zum 1000. Beitrag :zwinker: [/edit]

sirius 27. Mai 2008 13:05

Re: Canvas.Handle via GetDC(Panel1.Handle)
 
du hast vielleicht an irgendwelchen Farben gedreht, sodass dein Objekt unsichtbar wird. Oder es wird durch irgendetwas überzeichnet. Vielleicht ein RePaint?

EWeiss 27. Mai 2008 13:07

Re: Canvas.Handle via GetDC(Panel1.Handle)
 
Zitat:

Zitat von DeddyH
Bei mir geht das aber auch. Vielleicht liegt der Fehler ganz woanders?

[edit] Glückwunsch zum 1000. Beitrag :zwinker: [/edit]

Danke ... danke ;)
Achte auf sowas gar nicht. hiihihih

Ich übergebe das DC an meine DLL (BAssVis)
Über GetDC funktioniert es aber nicht über das direkte DC 'canvas.handle' was auch immer Image oder paintBox

Delphi-Quellcode:
SON_PaintHandle    : DWORD; // Als DWORD da GetDC Cardinal zurückgibt
Delphi-Quellcode:
    BASSVISKIND_SONIQUE:
    begin
      _HDC := GetDc(Panel1.handle);
      If optPanel.checked = True Then
      begin
        mExec.AMP_SON_Pluginfile := PChar(pathlist.Strings[IndexNum]);
        mExec.SON_ConfigFile    := PChar(PluginDir + '\vis.ini');
        mExec.SON_Flags         := 0;
        mExec.SON_PaintHandle   := _HDC;
        mExec.Left              := 0;
        mExec.Top               := 0;
        mExec.Width             := Panel1.Width;
        mExec.Height            := Panel1.Height;

        BASSVIS_ExecutePlugin(@mExec, mVisParam);
        ini := TIniFile.Create(ChangeFileExt(application.exename, '.ini'));
        sliSlowfade.Position := ini.ReadInteger('PluginType', 'Slowfade', 2);
        ini.Free;
      end;
funktioniert ohne problem

Delphi-Quellcode:
    BASSVISKIND_SONIQUE:
    begin
      If optPanel.checked = True Then
      begin
        mExec.AMP_SON_Pluginfile := PChar(pathlist.Strings[IndexNum]);
        mExec.SON_ConfigFile    := PChar(PluginDir + '\vis.ini');
        mExec.SON_Flags         := 0;
        mExec.SON_PaintHandle   := PaintBox1.Canvas.Handle;
        mExec.Left              := 0;
        mExec.Top               := 0;
        mExec.Width             := PaintBox1.Width;
        mExec.Height            := PaintBox1.Height;

        BASSVIS_ExecutePlugin(@mExec, mVisParam);
        ini := TIniFile.Create(ChangeFileExt(application.exename, '.ini'));
        sliSlowfade.Position := ini.ReadInteger('PluginType', 'Slowfade', 2);
        ini.Free;
      end;
geht nicht.. hmmmmm

gruss Emil

EWeiss 27. Mai 2008 14:47

Re: Canvas.Handle via GetDC(Panel1.Handle)
 
Zitat:

Zitat von sirius
du hast vielleicht an irgendwelchen Farben gedreht, sodass dein Objekt unsichtbar wird. Oder es wird durch irgendetwas überzeichnet. Vielleicht ein RePaint?

Denke nicht das was überschrieben wird.

habe jetzt mal nen test gemacht.

Delphi-Quellcode:
dc : HDC
dc := paintbox1.Canvas.Handle;

BASS_SONIQUEVIS_Render(vischan, RecChan, dc);
funktioniert nicht..

Delphi-Quellcode:
BASS_SONIQUEVIS_Render(vischan, RecChan, frmMain.paintbox1.Canvas.Handle);
funktioniert ...

verdammt nochmal irgendwo muss doch eine unterschied sein
das beide (gleiche) aufrufe unterschiedliche ergebnisse haben.

Macht auch keinen unterschied ob isch dc als DWORD oder Cardinal deklariere
geht alles nicht.

gruss Emil

Medium 27. Mai 2008 15:24

Re: Canvas.Handle via GetDC(Panel1.Handle)
 
Hast du schon mal die beiden Werte als Zahl angeschaut? Eventuell kommt ja doch im nicht funktionierenden Fall etwas unterschiedliches heraus, und am Ende ist es gar nicht sicher, dass beides das selbe ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 Uhr.
Seite 1 von 2  1 2      

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-2025 by Thomas Breitkreuz