Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2011, 08:17   #1
DolgoDoom
 
Регистрация: 23.05.2011
Сообщений: 7
По умолчанию Буфер обмена

Здравствуйте, Уважаемые профессионалы!

Я конено прочитал правила, но к сожалению даже не знаю как подобраться к проблеме. Обшарил нет ничего похожего нет .
Помогите пожалуйста!

А проблема такая, нужно создать буфет обмена состоящий из 14 элементов, два из которых будут .Assign(JPG).

Подскажите плз, как это можно организовать.
DolgoDoom вне форума Ответить с цитированием
Старый 23.05.2011, 10:39   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если в рамках одного проекта, то можно воспользоваться глобальными объектами в проекте для организации такого нетрадиционного буфера обмена. Для обмена данными между различными проектами копайте в сторону CreateFileMapping, OpenFileMapping
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.05.2011, 12:25   #3
DolgoDoom
 
Регистрация: 23.05.2011
Сообщений: 7
По умолчанию

Спс за ответ, сейчас попробую
Если не затруднить кинь пример кода, для второго варианта
DolgoDoom вне форума Ответить с цитированием
Старый 23.05.2011, 15:30   #4
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Вам принципиально использование именно стандартного буфера обмена или интересует просто обмен информацией между двумя вашими приложениями, не суть важно в каком формате?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 23.05.2011, 17:01   #5
DolgoDoom
 
Регистрация: 23.05.2011
Сообщений: 7
По умолчанию

Именно буфер обмена, просто задача несколько не стандартная.
DolgoDoom вне форума Ответить с цитированием
Старый 23.05.2011, 17:25   #6
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Тогда надо определиться, в каком виде вы собираетесь хранить данные.

Первое, что нужно сделать - понять, нельзя ли данные представить в виде общеизвестного формата. К примеру, набора файлов.

Если да - используем его.

Если подходящего формата не нашлось - реализуем свой. Делается это регистрацией private-формата. Ну а дальше дело техники: засериализовать данные в поток, поток запихать в буфер под своим форматом. И наоборот.

В любом случае, изучение начинаем отсюда: http://msdn.microsoft.com/en-us/libr...09(VS.85).aspx Для первого случая вас особенно вас будет интересовать, вероятно, этот раздел: http://msdn.microsoft.com/en-us/libr...02(VS.85).aspx

Тема относительно непростая и требует хорошей подготовки.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 30.05.2011, 13:59   #7
DolgoDoom
 
Регистрация: 23.05.2011
Сообщений: 7
По умолчанию

Большое спасибо всем за отзывы и подсказки. Задача почти решена
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Grids,
  StdCtrls, ExtCtrls, RySwapStream, DB, ADODB;

type

  TZadanie = record
    Image : ??? 
    V1, V2 ,V3 , V4 ,V5 , Key: String[25];
  end;

  
  private
    FRow: Integer;
    FGridEnabled: Boolean;
    FStreamKind: Byte;
    Stream : TStream;
    FStreamActive: Boolean;
    FZadanie: TZadanie;
    procedure SetGridEnabled(const Value: Boolean);
    procedure SetStreamActive(const Value: Boolean);
  private
    property StreamActive : Boolean read FStreamActive write SetStreamActive;
    property GridEnabled : Boolean read FGridEnabled write SetGridEnabled;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

constructor TForm1.Create(AOwner: TComponent);
begin
  inherited;
  begin
  try
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('SELECT * FROM DB1');
  ADOQuery1.Active:=True;
  ADOQuery2.SQL.Clear;
  ADOQuery2.SQL.Add('SELECT * FROM DB1');
  ADOQuery2.Active:=True;
  except
  on e:Exception do
  end;
  end;
  FRow := -1;

end;

destructor TForm1.Destroy;
begin
  StreamActive := False;
  inherited;
end;

procedure TForm1.RadioGroup1Click(Sender: TObject);

  procedure StreamKind(const Value: Byte);
  begin
    if Value = 1 then Edit1.Color := clWindow
    else Edit1.Color := clBtnFace;
    Edit1.Enabled := Value = 1;
    Button1.Enabled := Value > 0;
    Button3.Enabled := False;
    FStreamKind := Value;
  end;

begin
  StreamActive := False;
  StreamKind(RadioGroup1.ItemIndex);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  StreamActive := True;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  GridEnabled := True;
end;

const
  ACount = 3;

procedure TForm1.GridDrawCell(Sender: TObject; ACol, ARow: Integer;
          Rect: TRect; State: TGridDrawState);
const
  _FlagsText: Longint = (DT_LEFT or DT_NOCLIP or
              DT_VCENTER or DT_SINGLELINE or DT_END_ELLIPSIS);
var

  Str: String;
begin
  if not GridEnabled then Exit
  else
  if (ARow < 0) or (ARow > ACount) then Exit;

  if FRow <> ARow then
  begin
    FRow := ARow;
    Stream.Position := ARow * SizeOf(TZadanie);
    Stream.Read(FZadanie, SizeOf(TZadanie));
  end;

  case ACol of
    1: Str := FZadanie.Key;
    2: Str := FZadanie.V1;
    3: Str := FZadanie.V2;
    4: Str := FZadanie.V3;
    5: Str := FZadanie.V4;
    6: Str := FZadanie.V5;
    7: Str := FZadanie.Image;
    else Str := '';
  end;

  with Grid.Canvas do
  begin
    if (ARow <> 0) and (ACol <> 0) then
    begin
      if (ARow mod 2) = 0 then Brush.Color := clInfoBk
      else Brush.Color := clWhite;
      FillRect(Rect);
      Font.Color := clBlack;
    end;
    Windows.DrawText(Handle, PChar(Str), Length(Str), Rect, _FlagsText);
  end
end;

procedure TForm1.SetStreamActive(const Value: Boolean);
var
  FZ: TZadanie;
begin
  if FStreamActive = Value then Exit;

  if Value then
  begin
    case FStreamKind of
      1: begin
            if Edit1.Text = '' then Edit1.Text := 'Temp.dat';
            Stream := TFileStream.Create(Edit1.Text, fmCreate);
         end;
      2: Stream := TMemoryStream.Create;
      3: Stream := TRySwapStream.Create;
      else Exit;
    end;

    FZ.Key := 'Ключ';
    FZ.Image := 'Вопрос';
    FZ.Variant1 := 'Вариант 1';
    FZ.Variant2 := 'Вариант 2';
    FZ.Variant3 := 'Вариант 3';
    FZ.Variant4 := 'Вариант 4';
    FZ.Variant5 := 'Вариант 5';
    Stream.Write(FZ, SizeOf(TZadanie));

{выводим первую строку}

    begin
    ADOQuery1.First;
    ADOQuery1.Next;
      FZ.Key := (ADOQuery1.FieldByName('Key').AsString);
      FZ.Image := ????;
      FZ.Variant1 := (ADOQuery1.FieldByName('V1').AsString);
      FZ.Variant2 := (ADOQuery1.FieldByName('V2').AsString);
      FZ.Variant3 := (ADOQuery1.FieldByName('V3').AsString);
      FZ.Variant4 := (ADOQuery1.FieldByName('V4').AsString);
      FZ.Variant5 := (ADOQuery1.FieldByName('V5').AsString);
      Stream.Write(FZ, SizeOf(TZadanie));

    end;

    Button1.Enabled := False;
    Button3.Enabled := True;
  end else
  begin
    GridEnabled := False;
    Stream.Free;
  end;

  FStreamActive := Value;
end;

procedure TForm1.SetGridEnabled(const Value: Boolean);
begin
  if FGridEnabled = Value then Exit;
  if Value then
  begin
    Grid.RowCount := ACount;
    Grid.Enabled := True;
    Grid.Color := clWindow;
    Button3.Enabled := False;
  end else
  begin
    Grid.RowCount := 2;
    Grid.Enabled := False;
    Grid.Color := clBtnFace;
  end;

  FGridEnabled := Value;
end;

end.
Подскажите пожалуйста как теперь туда запихать Image. Из БД

Последний раз редактировалось Stilet; 30.05.2011 в 14:40.
DolgoDoom вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
буфер обмена DeDoK Win Api 1 25.10.2010 19:08
Буфер обмена dmitriegorovih Общие вопросы Delphi 13 09.09.2010 12:54
буфер обмена olimpus Microsoft Office Excel 2 19.09.2009 08:52
буфер обмена __@cmd@__ Общие вопросы Delphi 2 04.02.2009 12:24