Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Доступ к компанентам, правда в чужем приложении :) 
:(
    Опции темы
Snowy
Дата 19.7.2005, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Цитата(Romikgy @ 19.7.2005, 17:32)
Дык на мой взгляд былобы понятнее и организовать указателями с ^ , а не извращатся ( но только мое мнение )

А это и не изврашение. Во-первых програмеру и незачем знать, как оно реализовано внутри.
Во-вторых по стандарту ООП код должен писаться именно так, а не на закорючках.
В-третьих, кому действительно это надо, тот понимает, что и как есть на самом деле без всяких закорючек.
Цитата(Romikgy @ 19.7.2005, 17:32)
И это понятно, но вопрос остается данные сразу влетают в ттабле или по надобности?

По надобности.
PM MAIL   Вверх
Girder
Дата 21.7.2005, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 25
Всего: 155



Вот еще... один вариант smile :
PS: Вот только код не надо из под Delphi запускать smile
Код
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

type
 pMem=^TMem;
 TMem=record
  bAddr:DWord;
  Size:DWord;
 end;

function GetPagesMemoryProcess32(pID:Cardinal):TList;
var oProcess:Cardinal;
    MemAddr:Cardinal;
    MemInfo:_MEMORY_BASIC_INFORMATION;
    i:integer;
    m,t:pMem;
begin
 Result:=TList.Create;
 if pID=0 then exit;
 oProcess:=OpenProcess(PROCESS_QUERY_INFORMATION,false,pID);
 if oProcess<>0 then
  begin
   MemAddr:=0;
   while (VirtualQueryEx(oProcess,Pointer(MemAddr),MemInfo,SizeOf(_MEMORY_BASIC_INFORMATION))<>0) do
    begin
     MemAddr:=MemAddr+MemInfo.RegionSize;
     if MemInfo.State=MEM_COMMIT then
      begin
       New(m);
       m^.bAddr:=DWord(MemInfo.BaseAddress);
       m^.Size:=MemInfo.RegionSize;
       Result.Add(m);
      end; 
    end;
   CloseHandle(oProcess);
  end;
 for i:=Result.Count-1 downto 1 do
  begin
   m:=Result.Items[i];
   t:=Result.Items[i-1];
   if m^.bAddr=(t^.bAddr+t^.Size) then
    begin
     t^.Size:=t^.Size+m^.Size;
     Dispose(m);
     Result.Delete(i);
    end;
  end;
end;

function GetWinControl(const ClassName:string; WidthComponent,SeekWidth:DWord; var w:TWinControl):Boolean;
var i:integer;
    a:DWord;
    m:pMem;
    tw:TWincontrol;
    PMP:TList;
begin
 Result:=false;
 PMP:=GetPagesMemoryProcess32(GetCurrentProcessID()); 
 try
  for i:=0 to PMP.Count-1 do
   begin
    m:=PMP.Items[i];
    for a:=m^.bAddr to (m^.bAddr+m^.Size-4) do
     if PDWord(a)^=WidthComponent then
      begin
       try
        tw:=Pointer(a+SeekWidth);
        if AnsiCompareText(tw.ClassName,ClassName)=0 then
         begin
          w:=tw;
          Result:=true;
          exit;
         end;
       except
       end;
      end;
   end;
 finally
  for i:=PMP.Count-1 downto 0 do
   begin
    m:=PMP.Items[i];
    Dispose(m);
   end;
  PMP.Free; 
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var pW,pS:Pointer;
    w:TWinControl;
begin
 pW:=w;
 pS:[email protected];
 Memo1.Lines.Clear;
 Memo1.Lines.Add('Лабуда... лабуда... лабуда');
 if GetWinControl(Memo1.ClassName,Memo1.Width,DWord(pW)-DWord(pS),w) then
  begin
   Caption:=TMemo(w).Text;
  end;
end;

end.


PS: Но для такого решения... тебе надо будет много DLL под каждую вариации: Исходники+Компилятор(и настройки) smile


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Romikgy
Дата 21.7.2005, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Цитата(Girder @ 21.7.2005, 12:13)
PS: Вот только код не надо из под Delphi запускать

Почему ????

Код интересен smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Girder
Дата 21.7.2005, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 25
Всего: 155



Цитата(Romikgy @ 21.7.2005, 14:34)
Почему ????
Можеш замучиться исключения ловить smile


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Romikgy
Дата 21.7.2005, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Откуда им взяться то ? вроде код нормальный, и очень прикольный ... smile щаз сижу разбираюсь с ним smile
Добавлено @ 13:49
Кстати , можно ли определит это twincomponent или эта своя область какаято????


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
ScriptkidY
Дата 28.7.2005, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 24.7.2005
Где: Тюмень

Репутация: нет
Всего: нет



Есть еще одна шизовая идея!!!
можно посылать собщения этому гриду , по типу клавиша вниз, клавиша вверх, перед этим выделив ячейку 0,0 и посылая на каждой ячейке wm_copy а скажем в свой грид уже делать обычный paste ...
думаю это должно прокатить, но есть два не достатка!!!
1: по времени долго, где-то 20-200 мс
2: если грид большой то вовремени вытаскивания данных зверь может выбрать другу ячейку, но это исправимо кликом на ячейку 0,0 перед каждым "вниз, вверх"!!!

зы... я такое даже кое-где применял, тока не с гридами!!! работает!!!
PM MAIL ICQ   Вверх
Romikgy
Дата 28.7.2005, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



An application sends the WM_COPY message to an edit control or combo box to copy the current selection to the clipboard in CF_TEXT format.
Перевести надо ????

ЗЫ и не знаю как в других , но в требуемом мне приложении скопировать в буфер из грида нифига не удаетсяsmile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Rrader
  Дата 28.7.2005, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 29
Всего: 191



Есть способ получить текст из DBGrid! Проделайте такой код:
Код

Procedure TForm1.Button1Click(Sender: TObject);
Var
  Buf: Array[1..1024] Of Char;
  DBGridEdit: THandle;
Begin
  DBGridEdit := FindWindowEx(FindWindowEx(FindWindow(NIL,
    '<Заголовок чужой формы>'), 0, 'TDBGrid', NIL), 0, 'TDBGridInplaceEdit', NIL);
  GetWindowText(DBGridEdit, @Buf, SizeOf(Buf));
  Form1.Caption := StrPas(@Buf);
End;

Теперь выделите левую верхнюю ячейку и нажмите на кнопку! smile

Это сообщение отредактировал(а) Rrader - 28.7.2005, 15:24


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
ScriptkidY
Дата 28.7.2005, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 24.7.2005
Где: Тюмень

Репутация: нет
Всего: нет



Цитата(Romikgy @ 28.7.2005, 14:28)
An application sends the WM_COPY message to an edit control or combo box to copy the current selection to the clipboard in CF_TEXT format.
Перевести надо ????

ЗЫ и не знаю как в других , но в требуемом мне приложении скопировать в буфер из грида нифига не удаетсяsmile


почему??? если потому что стоит свойство о том что нельзя редактировать поля , то можно свойство поменять...
me_set ...... дальше не помню как... и ипослать его как 1 !!!

а еще лучше пользоваться советом от Rrader`a тока он также робить не будет я думаю... хотя смотреть надо...

Это сообщение отредактировал(а) ScriptkidY - 28.7.2005, 23:28
PM MAIL ICQ   Вверх
Romikgy
Дата 29.7.2005, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Цитата(Rrader @ 28.7.2005, 15:21)
Теперь выделите левую верхнюю ячейку и нажмите на кнопку!

Ну и нажал ... ну и ничего smile
Что это за зверь 'TDBGridInplaceEdit'????

Цитата(ScriptkidY @ 28.7.2005, 23:25)
почему??? если потому что стоит свойство о том что нельзя редактировать поля , то можно свойство поменять...
me_set ...... дальше не помню как... и ипослать его как 1 !!!

За совет сиба , но все таки WM_COPY message to an edit control or combo box , тобишь это сообщение передается для эдитов и комбобоксов так написано smile и плюс должно быть выделено smile
Цитата(ScriptkidY @ 28.7.2005, 23:25)
а еще лучше пользоваться советом от Rrader`a тока он также робить не будет я думаю... хотя смотреть надо...

Уже посмотрел , не работает smile
Вот куда смотреть ?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Rrader
  Дата 29.7.2005, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 29
Всего: 191



Цитата

Ну и нажал ... ну и ничего
Что это за зверь 'TDBGridInplaceEdit'????

Все работает! А этот зверь - это Edit, представляющий каждую ячейку! И с ним можно производить те же операции, что и с TEdit! smile

Это сообщение отредактировал(а) Rrader - 29.7.2005, 15:02


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Romikgy
Дата 29.7.2005, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Не знаю как оно у тя работает, я уже даже энум по окну сделал нету больше никаких окон и
TDBGridInplaceEdit не находит smile
У тя Дельфя какая????


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Rrader
Дата 29.7.2005, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 29
Всего: 191



Цитата

TDBGridInplaceEdit

Дело в том, что этот Edit по умолчанию недоступен! Чтобы исправить это, нужно в ячейке начать редактирование (чтобы появился курсор - жмем на ячейку мышью, затем жмем любую клавишу). smile


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Romikgy
Дата 29.7.2005, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Цитата(Rrader @ 29.7.2005, 15:35)
Дело в том, что этот Edit по умолчанию недоступен! Чтобы исправить это, нужно в ячейке начать редактирование (чтобы появился курсор - жмем на ячейку мышью, затем жмем любую клавишу).

Вот только сейчас с этим разобрался smile
Да , это все хорошо но что делать если вся колонка стоит readonly?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Гость_man
Дата 1.8.2005, 15:47 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











1. подключитесь к процессу
2. исп. FindControl или FindVCLWindow

Это сообщение отредактировал(а) Girder - 2.8.2005, 10:28
  Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1335 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.