AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi WM_CopyData mit Boolschen Variablen
Thema durchsuchen
Ansicht
Themen-Optionen

WM_CopyData mit Boolschen Variablen

Ein Thema von Helmi · begonnen am 2. Okt 2004 · letzter Beitrag vom 4. Nov 2005
Antwort Antwort
Seite 3 von 4     123 4      
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#21

Re: WM_CopyData mit Boolschen Variablen

  Alt 31. Okt 2005, 14:16
Zitat von SirThornberry:
Da es bei einem Dynamischen Array aber wie bei einem String ist (ist ein Zeiger der auf die zusammenhängenden Datein zeigt), kannst du auch einfach den Bereich angeben auf den der ArrayPointer zeigt.
Die Methode gefällt mir. Allerdings bin ich gerade noch im Hinblick auf cbData rastlos:
Delphi-Quellcode:
type
  PStringArray = ^TStringArray;
  TStringArray = array of String[255];
  [...]
var
  SAPointer : PStringArray;
  [...]
  if (MainApp > 0) and (SLData.Count > 0) then
  begin
    New(SAPointer);
    SetLength(SAPointer^,SLData.Count);
    for i:=0 to SLData.Count-1 do
      SAPointer^[i]:=SLData.Strings[i];
    with CDS do
    begin
      dwData:=LoWord(lpici.lpVerb); // MY_PLAY(0) oder MY_ADD(1)
      cbData:=???;
      lpData:=SAPointer;
    end;
    SendMessage(MainApp,WM_COPYDATA,0,LParam(@CDS));
  end;
Müsste ich die Länge des arrays mit der max. Länge (=256) der Strings multiplizieren?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#22

Re: WM_CopyData mit Boolschen Variablen

  Alt 31. Okt 2005, 16:51
genau so ist es. Wenn ein StringEllement eine größe von 255 Bytes hat so kannst du mit multiplication der Anzahl die gesamtgröße herausfinden. und wie du selbst schon geschrieben hast ist die größe eines Strings bei "[255]" gleich 256 Bytes. Aber sowas sollte man am besten mit "SizeOf" abfragen und nicht festen in den Quellcode tippen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#23

Re: WM_CopyData mit Boolschen Variablen

  Alt 31. Okt 2005, 19:22
Kann mir jemand von euch verraten, wieso man das über WM_COPYDATA machen würde? Das ist doch totaler Quark wenn ich nur Boolsche Variable übergeben will.

Mit LPARAM und WPARAM habe ich bei einer selbstdefinierten Fensternachricht ganze 64 Boolwerte, die ich auf einfachste Weise und ohne Zeigerfrickeleien übertragen kann.

Habe ich in der Frage was überlesen?
  Mit Zitat antworten Zitat
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#24

Re: WM_CopyData mit Boolschen Variablen

  Alt 1. Nov 2005, 21:39
Mmh, leider ist der Versuch fehlgeschlagen ;_;
cbData:=Length(SAPointer^) * SizeOf(ShortString); Mit dieser Länge erhalte ich nun zwar keine AV mehr, jedoch ist der Inhalt des arrays vollkommen willkürlich gefüllt. Hier mal mein Code vom Empfängerprogramm:
Delphi-Quellcode:
procedure TFMain.WMCopyData(var Msg: TWMCopyData);
type
  PStringArray = ^TStringArray;
  TStringArray = array of ShortString;
const
  MY_PLAY = 0;
  MY_ADD = 1;
var
  SAPointer : PStringArray;
  i : Integer;
  FileName : ShortString;
  [...]
begin
  SAPointer:=PStringArray(Msg.CopyDataStruct.lpData);
  if (SAPointer = nil) then exit;
  [...]
  try
    case Msg.CopyDataStruct.dwData of
      MY_PLAY :
        begin
          for i:=Low(SAPointer^) to High(SAPointer^) do
          begin
            FileName:=SAPointer^[i];
            [...]
          end;
        end;
      MY_ADD :
        begin
          for i:=Low(SAPointer^) to High(SAPointer^) do
          begin
            FileName:=SAPointer^[i];
            [...]
          end;
        end;
      MY_SHOW :
        begin
          [...]
        end;
    end;
  finally
    [...]
    // Einzelelemente freigeben
    for i:=High(SAPointer^) downto Low(SAPointer^) do
      SetLength(SAPointer^[i],0);
    // array freigeben
    SetLength(SAPointer^,0);
    Dispose(SAPointer);
  end;
end;
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#25

Re: WM_CopyData mit Boolschen Variablen

  Alt 1. Nov 2005, 21:52
Wie sieht denn dein Code zum Senden aus? Warum benutzt du einen Pointer vor dem Senden? Warum nicht einfach @ und dann dein Array von Shortstrings?
  Mit Zitat antworten Zitat
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#26

Re: WM_CopyData mit Boolschen Variablen

  Alt 4. Nov 2005, 21:33
Mein Code zum Senden steht doch bereits weiter oben im Thread. Kannste deine Lösungsmöglichkeit vllt genauer erläutern und etwas Sourcecode hinzufügen?
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#27

Re: WM_CopyData mit Boolschen Variablen

  Alt 4. Nov 2005, 22:11
Zitat von Nogge:
Mein Code zum Senden steht doch bereits weiter oben im Thread. Kannste deine Lösungsmöglichkeit vllt genauer erläutern und etwas Sourcecode hinzufügen?
Ging das an mich? SendMessage hat 4 Parameter von denen 2 frei definierbar sind, wenn man sich seine eigenen Nachrichten bastelt. Da es sich um "DWORD"s handelt, hat man 2x32bit = 64bit. Jedes Bit hat den Wert 0 oder 1 und kann somit als Boolean dienen. Wenn man also nur Booleans übertragen will, fährt man ohne den Umweg über WM_COPYDATA weit besser und schneller.
  Mit Zitat antworten Zitat
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#28

Re: WM_CopyData mit Boolschen Variablen

  Alt 4. Nov 2005, 22:17
Jo, das ging an dich. Allerdings bezog sich meine Frage auf deine letzte Antwort, wo du mir etwas über meine Methoden zum Senden von einem bzw. mehreren Strings sagen wolltest. Deine Methoden mit der eigenen Nachricht habe ich schon verstanden, darum ging es mir ja nicht^^
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#29

Re: WM_CopyData mit Boolschen Variablen

  Alt 4. Nov 2005, 22:22
Zitat von Nogge:
Allerdings bezog sich meine Frage auf deine letzte Antwort, wo du mir etwas über meine Methoden zum Senden von einem bzw. mehreren Strings sagen wolltest.
Nee, das waren ernsthafte Fragen. In deinem Code mit dem Stringarray zeigst du ja nur die Empfangsseite, oder stehe ich auf dem Schlauch?
  Mit Zitat antworten Zitat
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#30

Re: WM_CopyData mit Boolschen Variablen

  Alt 4. Nov 2005, 22:38
Ne, weiter oben (#21) steht mein Sende-Code ;-)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz