AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Delphi Äquivalent zu "AfxFrameOrView100u" gesucht

Delphi Äquivalent zu "AfxFrameOrView100u" gesucht

Ein Thema von Horst0815 · begonnen am 16. Jun 2016 · letzter Beitrag vom 17. Jun 2016
Antwort Antwort
Seite 1 von 2  1 2   
Horst0815

Registriert seit: 23. Mai 2011
Ort: Görlitz
149 Beiträge
 
Delphi XE Starter
 
#1

Delphi Äquivalent zu "AfxFrameOrView100u" gesucht

  Alt 16. Jun 2016, 17:01
Delphi-Version: 10 Seattle
Schlage mich grad mit einem SDK zu einen Oszilloskop rum soweit funktioniert auch alles was bisher übersetzt ist nur fehlt mir eine Idee wie ich die Graphen(2) darstellen kann. Diese werden so wie ich verstanden habe direkt aus der DLL in ein AfxFrameOrView100u(laut WinSpy) gezeichnet. Hat jemand eine Idee?


Code:
CStatic   m_stcDraw;
Code:
void CVCPrjDlg::OnBtnRead()
{
   // TODO: Add your control notification handler code here
   short* pCH1Data;
   short* pCH2Data;
   ULONG nReadLen = 10240;//10k
   ULONG nDrawLen = 10000;
   short nTrigLevel = 64;
   short nSlope = 0;// 0:Rise; 1: Fall
   short nHTrigPos = 50;// 0 ~ 100
   ULONG nTrigPoint = 0;
   CRect rc;
   m_stcDraw.GetClientRect(&rc);
   pCH1Data = new short[nReadLen];
   pCH2Data = new short[nReadLen];      

   short nRe = dsoReadHardData(m_nDevIndex,
                        pCH1Data,
                        pCH2Data,
                        nReadLen,
                        m_nCalData,
                        m_nCH1VoltDIV,
                        m_nCH2VoltDIV,
                        0,//0:AUOT; 1:Normal; 2: Signal
                        0,//CH1
                        nTrigLevel,
                        nSlope,
                        m_nTimeDIV,
                        nHTrigPos,
                        nDrawLen,
                        &nTrigPoint,
                        0);
   if(nRe > 0)
   {
      m_stcDraw.GetDC()->FillSolidRect(&rc,RGB(0,0,0));
   //Draw CH1
      HTDrawWaveInYT(m_stcDraw.GetDC()->GetSafeHdc(),rc,RGB(255,255,0),0,pCH1Data,nReadLen,nDrawLen,nReadLen / 2,64,1.0,1.0,0,0);

   //Draw CH2
      HTDrawWaveInYT(m_stcDraw.GetDC()->GetSafeHdc(),rc,RGB(0,255,0),0,pCH1Data,nReadLen,nDrawLen,nReadLen / 2,192,1.0,1.0,0,0);
   }

   delete pCH1Data;
   delete pCH2Data;
}
DLL Funktionen

Code:
DLL_API void WINAPI HTDrawWaveInYT(HDC hDC,RECT Rect,COLORREF clrRGB,
               USHORT nDisType,short* pSrcData,
               ULONG nSrcDataLen,ULONG nDisDataLen,
               ULONG nCenterData,USHORT nDisLeverPos,
               double dbHorizontal,double dbVertical,
               USHORT nYTFormat,ULONG nScanLen);

DLL_API void WINAPI HTDrawWaveInYTVB(HDC hDC,int left,int top,int right, int bottom, USHORT R, USHORT G,
                             USHORT B,USHORT nDisType,short* pSrcData,ULONG nSrcDataLen,ULONG nDisDataLen,ULONG nCenterData,
                             USHORT nDisLeverPos,double dbHorizontal,double dbVertical,USHORT nYTFormat,ULONG nScanLen);
Delphi-Quellcode:
Procedure HTDrawWaveInYT(DC: HDC; Rect: TRECT; clrRGB: COLORREF;
  nDisType: Word; pSrcData: PSmallInt; nSrcDataLen, nDisDataLen,
  nCenterData: Cardinal; nDisLeverPos: Word; dbHorizontal, dbVertical: Double;
  nYTFormat: Word; nScanLen: Cardinal);
stdcall external 'HTDisplayDLL.dll';

Procedure HTDrawWaveInYTVB(DC: HDC; left, top, right, bottom: Integer;
  R, G, B, nDisType: Word; pSrcData: PSmallInt;
  nSrcDataLen, nDisDataLen, nCenterData: Cardinal; nDisLeverPos: Word;
  dbHorizontal, dbVertical: Double; nYTFormat: Word; nScanLen: Cardinal);
stdcall external 'HTDisplayDLL.dll';

Geändert von Horst0815 (16. Jun 2016 um 17:14 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Delphi Äquivalent zu "AfxFrameOrView100u" gesucht

  Alt 16. Jun 2016, 17:38
Keine Möglichkeit dir das Handle vom AfxFrameOrView zu holen?
Wenn du mit Spy das ermitteln kannst sollte eigentlich ein Handle vorhanden sein.

Kannst du es ermitteln dann reicht ein einfaches SeParent zu einer von dir gewünschten Komponente Panel als Beispiel.
Aber nicht vergessen das Window vorher zu suchen.

afxframeorview := FindWindowEx(afxmdiframe, afxframeorview, 'AfxFrameOrView100u', nil);

gruss

Geändert von EWeiss (16. Jun 2016 um 17:45 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Delphi Äquivalent zu "AfxFrameOrView100u" gesucht

  Alt 16. Jun 2016, 17:57
Sollte ich das falsch verstanden haben..
Also die DLL in einer anderen Anwendung auf das AfxFrameOrView zeichnet.
Dann benötigst du kein Äquivalent..

Du solltest in dem Fall direkt auf ein Panel\PaintBox zeichnen können.
verwende dann dazu einfach das HDC.. das du Anscheinend der DLL mit übergeben musst.

HTDrawWaveInYTVB(DC: HDC;

gruss
  Mit Zitat antworten Zitat
Horst0815

Registriert seit: 23. Mai 2011
Ort: Görlitz
149 Beiträge
 
Delphi XE Starter
 
#4

AW: Delphi Äquivalent zu "AfxFrameOrView100u" gesucht

  Alt 16. Jun 2016, 18:06
Ja genau hatte ich schon geschrieben hat nur länger gedauert. Paintbox hatte ich schon etwas rumgespielt aber ohne erfolg. Ich schau nochmal Danke
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Delphi Äquivalent zu "AfxFrameOrView100u" gesucht

  Alt 16. Jun 2016, 18:09
Ja genau hatte ich schon geschrieben hat nur länger gedauert. Paintbox hatte ich schon etwas rumgespielt aber ohne erfolg. Ich schau nochmal Danke
Sorry verwende in der PaintBox OnPaint wenn du etwas zeichnen willst.
Aber ich denke das du das selber weißt.

gruss
  Mit Zitat antworten Zitat
Horst0815

Registriert seit: 23. Mai 2011
Ort: Görlitz
149 Beiträge
 
Delphi XE Starter
 
#6

AW: Delphi Äquivalent zu "AfxFrameOrView100u" gesucht

  Alt 17. Jun 2016, 17:29
So Heut nochmal drangesetzt und plötzlich läufts. Gar nicht so schwer wie gedacht.

Danke Dir nochmal.
Miniaturansicht angehängter Grafiken
scopenew.jpg  

Geändert von Horst0815 (17. Jun 2016 um 17:43 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Delphi Äquivalent zu "AfxFrameOrView100u" gesucht

  Alt 17. Jun 2016, 18:17
So Heut nochmal drangesetzt und plötzlich läufts. Gar nicht so schwer wie gedacht.

Danke Dir nochmal.
Fein wenn es denn geht..
Aber prüfe deinen Speicher..

Möglich das du das DC auch wieder freigeben musst.
Je nachdem wie du es und vor allem von was du es benutzt.

Wenn du PaintBox.Canvas.Handle verwendest sollte ein PaintBox.Free ausreichen wenn du die Anwendung beendest oder nicht zeichnest.

Ich kann sehen das du das DC zuweist aber es nicht verwendest.
Das gibt ärger wenn du es nicht frei gibst.

Schon seltsam ohne Code Deshalb frage ich!

Zeige mir mal bitte den Code Ausschnitt.

DoubleBuffer der Form einstellen nicht vergessen..

gruss

Geändert von EWeiss (17. Jun 2016 um 18:26 Uhr)
  Mit Zitat antworten Zitat
Horst0815

Registriert seit: 23. Mai 2011
Ort: Görlitz
149 Beiträge
 
Delphi XE Starter
 
#8

AW: Delphi Äquivalent zu "AfxFrameOrView100u" gesucht

  Alt 17. Jun 2016, 19:21
Das gute ist ich brauch nix per Canvas selbst zeichnen das macht alles die DLL ( Funktionen leider nicht im SDK veröffentlicht musste ich mir selbst mit IDA suchen)


Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  rc.Height := PaintBox1.Height;
  rc.Width := PaintBox1.Width;
  PaintBox1.canvas.Brush.Color := clBlack;
  PaintBox1.canvas.FillRect(rc);
  FillChar(m_nCH1Data, sizeOf(m_nCH1Data), #0);
  FillChar(m_nCH2Data, sizeOf(m_nCH2Data), #0);
  StatusBar1.Panels[0].Text := 'Disconnected';
  m_nDevIndex := rgDevice.ItemIndex;
  m_nCH1VoltDIV := 5 { DIV1V }; // 1V/DIV
  m_nCH2VoltDIV := 5 { DIV1V }; // 1V/DIV
  m_nTimeDIV := 14 { t1MSa }; // 1MSa/s
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  PaintBox1.Free;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  PaintBox1Paint(Sender);
end;

procedure TForm1.PaintBox1Paint(Sender: TObject);
  Procedure Draw;
  var
    nTrigLevel: SmallInt;
    nSlope: SmallInt;
    nHTrigPos: SmallInt;
    nTrigPoint: Cardinal;
    nRe: SmallInt;
  begin
    nTrigLevel := 64;
    nSlope := 0; // 0:Rise; 1: Fall
    nHTrigPos := 50; // 0 ~ 100
    nTrigPoint := 0;
    nRe := dsoReadHardData(m_nDevIndex, @m_nCH1Data, @m_nCH2Data, mReadLen,
      @m_nCalData, m_nCH1VoltDIV, m_nCH2VoltDIV, 0 { TrigAuto } ,
      0 { TrigSCh1 } , nTrigLevel, nSlope, m_nTimeDIV, nHTrigPos, mDrawLen,
      @nTrigPoint, 0);
    if (nRe > 0) then
    begin
      // Draw Grid
      HTDrawGrid(PaintBox1.canvas.Handle, rc.Left, rc.Top, rc.Right, rc.Bottom,
        10, 5, 500, 900);
      // Draw Border
      HTDrawGridBorder(PaintBox1.canvas.Handle, rc.Left+3, rc.Top+3, rc.Right-3,
      rc.Bottom-3);
      // Draw CH1
      HTDrawWaveInYT(PaintBox1.canvas.Handle, rc, RGB(255, 255, 0), 0,
        @m_nCH1Data, mReadLen, mDrawLen, mReadLen div 2, 64, 1.0, 1.0, 1, 0);
      // Draw CH2
      HTDrawWaveInYT(PaintBox1.canvas.Handle, rc, RGB(0, 255, 0), 0,
        @m_nCH2Data, mReadLen, mDrawLen, mReadLen div 2, 192, 1.0, 1.0, 1, 0);
    end;
  end; // Procedure Draw;

begin
  Draw;
end;

procedure TForm1.rgDeviceClick(Sender: TObject);
begin
  m_nDevIndex := rgDevice.ItemIndex;
end;
Miniaturansicht angehängter Grafiken
scopenew.jpg  

Geändert von Horst0815 (17. Jun 2016 um 19:36 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: Delphi Äquivalent zu "AfxFrameOrView100u" gesucht

  Alt 17. Jun 2016, 20:45
Zitat:
Das gute ist ich brauch nix per Canvas selbst zeichnen das macht alles die DLL
Ja aber nur wenn du ihr das HDC übergibst.
Ohne weiß er halt nicht wo er hinzeichnen soll.

Aber gut ist egal jetzt.. (geht ja).

Kann aber jetzt nicht das DC sehen das du initialisiert hast wie in deinem Bild zu sehen.

Auf 'dc' zugewiesener Wert wird niemals benutzt.
Das hätte mich interessiert scheinst du aber schon behoben zu haben.

Fehlt aber noch das FillSolidRect.. FloodFill kommt dem am nächsten.


gruss

Geändert von EWeiss (17. Jun 2016 um 20:52 Uhr)
  Mit Zitat antworten Zitat
Horst0815

Registriert seit: 23. Mai 2011
Ort: Görlitz
149 Beiträge
 
Delphi XE Starter
 
#10

AW: Delphi Äquivalent zu "AfxFrameOrView100u" gesucht

  Alt 17. Jun 2016, 20:51
Ist alles noch etwas wirr ich entecke grad so viele Dinge in den Dll´s hab überall Baustellen da wird schon mal was vergessen

Sollte eig eher ne Machbarkeits Studie werden aber ich glaub da bleib ich ne Weile dran.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf