буфер обмена в WinApi

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by yfet, 25 Oct 2010.

  1. yfet

    yfet Banned

    Joined:
    11 Jul 2009
    Messages:
    48
    Likes Received:
    19
    Reputations:
    5
    не компилируется процедура
    procedure CopyStringToClipboard(s: string);
    var
    hg: THandle;
    P: PChar;
    begin
    hg:=GlobalAlloc(GMEM_DDESHARE or GMEM_MOVEABLE, Length(S)+1);
    P:=GlobalLock(hg);
    StrPCopy(P, s);
    GlobalUnlock(hg);
    OpenClipboard(Application.Handle);
    SetClipboardData(CF_TEXT, hg);
    CloseClipboard;
    GlobalFree(hg);
    end;

    ругается на StrPCopy и Application.Handle :(

    не хочется подрубать много модулей так как важен размер. у кого какие предложения? :confused:
     
  2. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Что значит ругается? У нас компилятор тупой такой, только ругается а что именно не компилируется неизвестно?
    Или я желая помочь должен копировать код и компилировать у себя?

    Application объявлен в модуле forms.pas, подключая его ты сразу увеличишь размер exe потому что там глобальные переменные
     
  3. yfet

    yfet Banned

    Joined:
    11 Jul 2009
    Messages:
    48
    Likes Received:
    19
    Reputations:
    5
    [Error] proj.dpr(23): Undeclared identifier: 'StrPCopy'
    [Error] proj.dpr(25): Undeclared identifier: 'Application'
    [Error] proj.dpr(25): ')' expected but identifier 'Handle' found
     
  4. RedFern.89

    RedFern.89 Member

    Joined:
    20 Jan 2010
    Messages:
    575
    Likes Received:
    48
    Reputations:
    0
    Вы хотите юзать StrPCopy и Application неиспользуя Forms.pas и SysUtils.pas? ? тогда вы немножко заблуждаетесь.

    вот вам 2 способа решения проблемы. ВНИМАНИЕ!МОЖЕТ НЕ ПРОКАТИТЬ!!

    вместо

    Code:
    OpenClipboard(Application.Handle);
    
    попробуйте

    Code:
    [color=yellow][i]// буферу хэндл нужен дя того, что бы он знал, что за программа кидает в него свои данныеи этот параметр не оязателен[/i][/color]
     OpenClipboard(0);
    
    а strpcopy вот вам: (SysUtils.pas)

    Code:
    function StrLCopy(Dest: PChar; const Source: PChar; MaxLen: Cardinal): PChar; assembler;
    asm
            PUSH    EDI
            PUSH    ESI
            PUSH    EBX
            MOV     ESI,EAX
            MOV     EDI,EDX
            MOV     EBX,ECX
            XOR     AL,AL
            TEST    ECX,ECX
            JZ      @@1
            REPNE   SCASB
            JNE     @@1
            INC     ECX
    @@1:    SUB     EBX,ECX
            MOV     EDI,ESI
            MOV     ESI,EDX
            MOV     EDX,EDI
            MOV     ECX,EBX
            SHR     ECX,2
            REP     MOVSD
            MOV     ECX,EBX
            AND     ECX,3
            REP     MOVSB
            STOSB
            MOV     EAX,EDX
            POP     EBX
            POP     ESI
            POP     EDI
    end;
    
    function StrPCopy(Dest: PChar; const Source: string): PChar;
    begin
      Result := StrLCopy(Dest, PChar(Source), Length(Source));
    end;
    
    если нужно одну функцию, то объединяйте сами, думаю догадаетесь как это намутить
     
    #4 RedFern.89, 25 Oct 2010
    Last edited: 25 Oct 2010
  5. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    ПИПЕЦ, это ЛОЛ
    ты не знаешь что такое "Undeclared identifier"?
    даже если ты такой нуп что до сих пор не знаешь эту самую частую ошибку компиляции, то можно было спросить у гугловского переводчика, и узнать что это "Необъявленный идентификатор"
    далее, узнав что за ошибка можно догадаться что надо кое-какие модули добавить в uses. А какие именно можно быстро нагуглить или даже поискать в справке дельфи.
    StrPCopy - SysUtils
    Про Application я уже написал выше
     
  6. RedFern.89

    RedFern.89 Member

    Joined:
    20 Jan 2010
    Messages:
    575
    Likes Received:
    48
    Reputations:
    0
    GhostOnline, нестолько нуб, сколько недонес всей сути.. он мне в аське щас писал и сказал, что ему не хочеца подключать Forms.pas, так как размер имеет значение. Хотя может и он действительно недогадался
     
  7. yfet

    yfet Banned

    Joined:
    11 Jul 2009
    Messages:
    48
    Likes Received:
    19
    Reputations:
    5

    харош тут показывать какой ты охиренно умный, сам лолом давно был? просил ошибки - я показал.
    спасибо RedFern.89, помог очень :)
     
  8. RedFern.89

    RedFern.89 Member

    Joined:
    20 Jan 2010
    Messages:
    575
    Likes Received:
    48
    Reputations:
    0
    а на счет OpenClipboard можешь не париться. Это нужно для того, что бы буфер обмена знал о программе, которая помещат в него свои данные. Этот параметр не обязателен
     
  9. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Лол - не человек. Лол - отношение к происходящему.
    И таким как ты я никогда не был. Я сначала читал книги.
    Я просил ошибки - как у тебя рука поворачивается такое писать? Мне чтоли помошь твоя нужна и я прошу? Просто прежде чем создавать тред пробуй искать сам, а если все так сложно и не смог найти то хотя бы скопируй сообщения компилера сюда.
    Судя по треду он вообще не знал про Forms.Application..
     
    1 person likes this.
  10. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    2 GhostOnline, да он уже стока тредов наплодил, скоро тут за него программу напишут :)
    кстати эта фигня заразная, я теперь вместо манов и гугла лезу в аську и задаю вопрос SLESH-у (но не часто, так как сам бы убил за такое поведение). кошмар кошмар
     
    _________________________
  11. RedFern.89

    RedFern.89 Member

    Joined:
    20 Jan 2010
    Messages:
    575
    Likes Received:
    48
    Reputations:
    0
    Gar|k, я сам ему много вопросов в аське задаю. очень адекватный человек. Однако много беспокоить его не стоит, ибо у него свои дела тоже есть и время