Avatar billede segato Nybegynder
14. januar 2005 - 10:35 Der er 9 kommentarer og
1 løsning

SendMessage fra c#

Jeg vil gerne sende en message til en textbox men kan ikke rigtig få det til at virke. Her er koden:

namespace WindowsApplication7
{
   
    [StructLayout(LayoutKind.Sequential)]
    public struct RECT
    {
        public int left;
        public int top;
        public int right;
        public int bottom;
    }
    /// <summary>
    /// Summary description for Form1.
    /// </summary>
    public class Form1 : System.Windows.Forms.Form
    {
        [DllImport("USER32.DLL", EntryPoint= "SendMessage")]
        public static extern int SendMessage(IntPtr hwnd,int msg,int wParam,RECT lParam);

        const int EM_GETRECT = 0x00b2;

        private System.Windows.Forms.Button button1;
        private System.Windows.Forms.TextBox textBox1;
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.Container components = null;

        public Form1()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();

            //
            // TODO: Add any constructor code after InitializeComponent call
            //
        }

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.button1 = new System.Windows.Forms.Button();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.SuspendLayout();
            //
            // button1
            //
            this.button1.Location = new System.Drawing.Point(64, 16);
            this.button1.Name = "button1";
            this.button1.TabIndex = 0;
            this.button1.Text = "button1";
            this.button1.Click += new System.EventHandler(this.button1_Click);
            //
            // textBox1
            //
            this.textBox1.Location = new System.Drawing.Point(40, 88);
            this.textBox1.Multiline = true;
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(184, 48);
            this.textBox1.TabIndex = 1;
            this.textBox1.Text = "textBox1";
            //
            // Form1
            //
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(292, 273);
            this.Controls.Add(this.textBox1);
            this.Controls.Add(this.button1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.Load += new System.EventHandler(this.Form1_Load);
            this.ResumeLayout(false);

        }
        #endregion

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.Run(new Form1());
        }

        private void Form1_Load(object sender, System.EventArgs e)
        {
       
        }

        private void button1_Click(object sender, System.EventArgs e)
        {
            RECT rc = new RECT();

            try
            {
                SendMessage(textBox1.Handle,EM_GETRECT,0, rc);
            }
            catch(Exception ex)
            {
                string h = "";
            }
        }   
    }
Avatar billede wisen Nybegynder
14. januar 2005 - 10:46 #1
Hmm - ifølge dokumentationen skal dit 'rc' - argument være en pointer til en RECT struktur...

Prøv at bruge en IntPtr istedet - du kan bruge klassen Marshal til at lave IntPtr om til og fra managed objekter.
Avatar billede segato Nybegynder
14. januar 2005 - 11:44 #2
Men det er meningen jeg skal have returneret en RECT med info omkring en textbox informationer. Så det hamonere det ikke helt med en IntPtr?
Avatar billede wisen Nybegynder
14. januar 2005 - 12:50 #3
Prøv med noget i stil med :

using System.Runtime.InteropServices;
...

[DllImport("USER32.DLL", EntryPoint= "SendMessage")]
public static extern int SendMessage(IntPtr hwnd, int msg, int wParam, IntPtr ptr);

...

IntPtr pRect = Marshal.AllocHGlobal( Marshal.SizeOf(typeof(RECT)) );
Marshal.StructureToPtr(new RECT(), pRect, true);
SendMessage(textBox1.Handle, EM_GETRECT, 0, pRect );
RECT rc = Marshal.PtrToStructure(pRect, typeof(RECT)) as RECT;
Avatar billede segato Nybegynder
14. januar 2005 - 15:13 #4
Fandt ud af der bare skulle en ref for an RECT på i declaration og implementering. Men smid lige et svar tak for hjælpen.
Avatar billede wisen Nybegynder
14. januar 2005 - 16:30 #5
1 stk. svar
Avatar billede segato Nybegynder
16. januar 2005 - 17:58 #6
trykker på accepterte ser ik ud som det virker? Får du dine points? Siden reloader bare når jeg trykker?
Avatar billede wisen Nybegynder
17. januar 2005 - 07:54 #7
Du skal først vælge mit brugernavn i boksen ved siden af accepter-knappen - så burde det virke ;)
Avatar billede wisen Nybegynder
22. januar 2005 - 14:32 #8
Virker det stadig ikke?
Avatar billede segato Nybegynder
23. januar 2005 - 12:28 #9
Nå for satan! Skal lige igennem alle mine spørgsmål havde ikke markeret dig. Det må i undskylde i skal selvfølgelig have jeres points.
Avatar billede wisen Nybegynder
24. januar 2005 - 07:57 #10
hehe - no problem ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB