Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

количествово кликов на картинке

17K
10 января 2007 года
rasl
15 / / 20.09.2006
Кто знает как написать код?Когда нажимаю на picture и в окне Edit выводить кол-во кликов на картину

примерный код программы:
Код:
object Form1: TForm1
Left = 75
Top = 258
Width = 976
Height = 749
Caption = 'Rasl project'
Color = clLime
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
Menu = MainMenu1
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Memo1: TMemo
Left = 0
Top = 16
Width = 353
Height = 33
Lines.Strings = (
'Нажимайте на кнопки,и сумма ваших кликов автоматически будут '
'отображаться '
'в окнах')
TabOrder = 0
end
object Edit1: TEdit
Left = 360
Top = 656
Width = 225
Height = 21
Color = clMenuHighlight
TabOrder = 1
Text = 'Все права защищены (C) 2006 Rasl project'
end
object MainMenu1: TMainMenu
Left = 592
Top = 40
object ertrtrt1: TMenuItem
Caption = 'Сохранить:'
object N6: TMenuItem
Caption = 'Сохранить как...'
end
end
object N1: TMenuItem
Caption = 'Подсчет маска периферической крови:'
object N2: TMenuItem
end
end
object N3: TMenuItem
Caption = 'Нормобласты:'
end
object N4: TMenuItem
Caption = 'Клетки Боткина-Гумиряхта:'
end
object N5: TMenuItem
Caption = 'Автор:'
end
end
end

[COLOR=red][COLOR=black][size=2][/COLOR]Давай темем смысловые названия, используй теги code. почитай правила форума Делфи.[/COLOR][COLOR=black][/size][/COLOR]
8
10 января 2007 года
mfender
3.5K / / 15.06.2005
Цитата:
Кто знает как написать код?


Я знаю.

Кому тут нужен текст формы? И что-то в ней не видно пресловутого "picture".
Делай класс-наследник, например от TPanel, на котором положи TPicture. И поле-счётчик. И publish-property к этому свойству, в котором будет храниться количество кликов. Соответственно, в OnClick инкременируй значение. Ну и подумай, как это можно сохранить.

7.9K
10 января 2007 года
user13
66 / / 07.11.2006
 
Код:
procedure TForm1.Image1Click(Sender: TObject);
var
i : Integer;
begin
Tag := Tag + 1;
i := TAg;
Edit1.Text := IntToStr(i);
end;
8
10 января 2007 года
mfender
3.5K / / 15.06.2005
2user13: Сам-то понял, что написал? :D
7.9K
10 января 2007 года
user13
66 / / 07.11.2006
Всё понял Кликаем по картинке и получаем в едит количисво кликов...
Этоже нада?
8
10 января 2007 года
mfender
3.5K / / 15.06.2005
Я бы сделал примерно так:

Код:
type
  TMyPicture = class(TImage)
  private
    FClickCounter: Integer;
    FOnCounterChange: TNotifyEvent;
    procedure SetClickCounter(const Value: Integer);
    procedure Click(Sender: TObject);
  public
    constructor Create(AOwner: TComponent); override;
    property ClickCounter: Integer read FClickCounter write SetClickCounter;
  published
    property OnCounterChange: TNotifyEvent
      read FOnCounterChange write FOnCounterChange;
  end;
 
  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
  private
    procedure ImageCounterChange(Sender: TObject);
  public
    Image1: TMyPicture;
  end;
 
var
  Form1: TForm1;
 
implementation
 
{ TMyPicture }
 
procedure TMyPicture.Click(Sender: TObject);
begin
  ClickCounter := ClickCounter + 1;
  if Assigned(FOnCounterChange) then
    FOnCounterChange(Self);
end;
 
constructor TMyPicture.Create(AOwner: TComponent);
begin
  inherited;
  Parent := TWinControl(AOwner);
  OnClick := Click;
end;
 
procedure TMyPicture.SetClickCounter(const Value: Integer);
begin
  FClickCounter := Value;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Image1 := TMyPicture.Create(Self);
  Image1.OnCounterChange := ImageCounterChange;
  Image1.Top := 100;
  Image1.Left := 100;
  Image1.Width := 300;
  Image1.Height := 300;
  Image1.Picture.LoadFromFile('.....путь к файлу....');
end;
 
procedure TForm1.ImageCounterChange(Sender: TObject);
begin
  Edit1.Text := IntToStr(Image1.ClickCounter);
end;
end.
303
11 января 2007 года
makbeth
1.0K / / 25.11.2004
Ээээ... mfender, а зачем такой изврат? Вроде user13 правильную идею с Tag дал, только код немного не верен (хотя и он сработает, если свойство Tag формы больше нигде не используется). Маленькое исправление:
 
Код:
procedure TForm1.Image1Click(Sender: TObject);
begin
    with Image1 do
    begin
        Inc(Tag);
        Edit1.Text := IntToStr(Tag);
    end;
end;
8
11 января 2007 года
mfender
3.5K / / 15.06.2005
Конечно изврат, если нужно просто циферку писать в TEdit. Но имеет-ли это какое-то прикладное значение? Может быть это значение следует хранить в БД, например? Тогда я сделал бы в нём ещё TFieldDataLink - тут уж Tag'ом не отделаешься... Точнее, это уже будет извратом.

Так что, всё очень относительно... Ведь согласись, что все компоненты из VCL применяются в самых различных ситуациях, и мне кажется, что гораздо удобнее зачастую написать их наследников с нужным функционалом, чем в TForm1 писать горы года для каждого компонента...
303
11 января 2007 года
makbeth
1.0K / / 25.11.2004
Цитата: mfender
Ведь согласись, что все компоненты из VCL применяются в самых различных ситуациях, и мне кажется, что гораздо удобнее зачастую написать их наследников с нужным функционалом, чем в TForm1 писать горы года для каждого компонента...


Естественно, я с тобой согласен. Просто был задан вопрос именно про Edit, а твое решение для него ну очень замороченное :)

8
11 января 2007 года
mfender
3.5K / / 15.06.2005
Цитата: makbeth
Естественно, я с тобой согласен. Просто был задан вопрос именно про Edit, а твое решение для него ну очень замороченное :)


А что там замороченного? Класс с тремя методами...

309
11 января 2007 года
el scorpio
1.1K / / 19.09.2006
Цитата:
Делай класс-наследник, например от TPanel, на котором положи TPicture. И поле-счётчик. И publish-property к этому свойству, в котором будет храниться количество кликов. Соответственно, в OnClick инкременируй значение. Ну и подумай, как это можно сохранить.


А ещё можно "фрейм" сделать.
В главном меню выбираем: "File \ New \ Frame"
Создаётся модуль с файлами "Frame1.cpp", "Frame1.h" и "Frame1.dfm". На изображаемой форме раскладываем компоненты, устанавливаем связи, пишем код. При необходимости для класса фрейма дополнительно объявляем поля, методы, свойства и события.
Потом переключаемся на форму окна и выбираем в списке компонентов "Frame" (первый элемент на панели стандартных визуальных компонентов). И созданный объект одним щелчком мыши кладётся на форму.

Ведь представьте себе, что вам нужно создать десяток элементов, содержащих кнопку, при нажатии которой открывается окно выбора файла, имя которого потом выводится в текстовое поле. Что вы будете делать: распологать десяток наборов компонентов, давая каждому индивидуальное имя и прописывая для каждой кнопки вывод в соответствующее поле? Или создадите один класс фрейма, объекты которого будут использоваться легко и просто?

17K
12 января 2007 года
rasl
15 / / 20.09.2006
Цитата: makbeth
Ээээ... mfender, а зачем такой изврат? Вроде user13 правильную идею с Tag дал, только код немного не верен (хотя и он сработает, если свойство Tag формы больше нигде не используется). Маленькое исправление:
 
Код:
procedure TForm1.Image1Click(Sender: TObject);
begin
    with Image1 do
    begin
        Inc(Tag);
        Edit1.Text := IntToStr(Tag);
    end;
end;



Я написал этот код... но у меня не компилируется :(

Код:
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    MainMenu1: TMainMenu;
    ertrtrt1: TMenuItem;
    N6: TMenuItem;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Image4: TImage;
    Edit1: TEdit;
    Edit2: TEdit;
    LabeledEdit1: TLabeledEdit;
    LabeledEdit2: TLabeledEdit;
    procedure Image1Click(Sender: TObject);
   
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.Image1Click(Sender: TObject);
begin
    with Image1 do
    begin
       // Inc(Tag);   здесь  скорей всего какая то ошибка...,что это за поцедура...
        Edit1.Text := IntToStr(Tag);
    end;
end;


end.


выдает ошибку Left side cannot be assigned to
17K
12 января 2007 года
rasl
15 / / 20.09.2006
Цитата: user13
 
Код:
procedure TForm1.Image1Click(Sender: TObject);
var
i : Integer;
begin
Tag := Tag + 1;
i := TAg;
Edit1.Text := IntToStr(i);
end;



спасиб :) ..
Этот код работает!
Щас вродебы разобрался... :)

303
12 января 2007 года
makbeth
1.0K / / 25.11.2004
Цитата:

выдает ошибку Left side cannot be assigned to


Гм... с Inc я наверное погорячился...

Цитата:

А что там замороченного? Класс с тремя методами...


Вот именно, что целый класс.. Кроме того, это еще и, фактически, новый компонент. А если его надо использовать в design-time, то еще и надо добавлять в палитру. Может быть для тебя и меня это тривиально, но для автора топика, боюсь все далеко не просто (прошу не обижаться автору)...

8
12 января 2007 года
mfender
3.5K / / 15.06.2005
Цитата: makbeth
Гм... с Inc я наверное погорячился...


Кстати, да. Мне вот тоже ещё ни разу не удалось задействовать Inc()... Странно как-то всё это...

Цитата: makbeth
Вот именно, что целый класс.. Кроме того, это еще и, фактически, новый компонент. А если его надо использовать в design-time, то еще и надо добавлять в палитру. Может быть для тебя и меня это тривиально, но для автора топика, боюсь все далеко не просто (прошу не обижаться автору)...


Нет, ну в поллитру его прописывать не стоит... Я так вообще предпочитаю всё расписать руками - юнитов больше, но .exe - в десятки раз меньше. А кое-то вообще в dll упаковываю - то чем часто пользуюсь и доволен работоспособностью и функциональностью.

309
12 января 2007 года
el scorpio
1.1K / / 19.09.2006
Цитата:
Кстати, да. Мне вот тоже ещё ни разу не удалось задействовать Inc()... Странно как-то всё это...


А потому что применяете его к свойству объекта класса. Скорее всего, функция Inc (var Value: Integer) требует именно изменяемого значения.
Кстати, сишные операторы ++ в этой ситуации работают правильно :D

9.0K
13 января 2007 года
Toxin_F
93 / / 03.01.2007
Да что наворачивать, самое простое решение:
Код:
type
  TForm1 = class(TForm)
    Image1: TImage;
    Edit1: TEdit;
    procedure Image1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  i: integer;
implementation

{$R *.dfm}

procedure TForm1.Image1Click(Sender: TObject);
begin
  inc(i);
  edit1.Text:=inttostr(i);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  i:=0;
  edit1.Text:='0';
end;

end.
8
13 января 2007 года
mfender
3.5K / / 15.06.2005
Цитата: Toxin_F
Да что наворачивать, самое простое решение:


Вот ещё умный человек пришол с упрощением...
2Toxin_F: а если таких картинок две штуки на форме? Делать две глобальных переменные? А если сто картинок?

9.0K
13 января 2007 года
Toxin_F
93 / / 03.01.2007
Цитата: mfender
... а если таких картинок две штуки на форме? Делать две глобальных переменные? А если сто картинок?



Сто, говоришь, эту проблему можно решить простым ARRAY'ем:

Код:
var
  Form1: TForm1;
  i: array[0..100] of integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  edit1.Text:='0';
  edit2.Text:='0';
end;

procedure TForm1.Image1Click(Sender: TObject);
begin
  i[0]:=strtoint(edit1.Text);
  inc(i[0]);
  edit1.Text:=inttostr(i[0]);
end;

procedure TForm1.Image2Click(Sender: TObject);
begin
  i[1]:=strtoint(edit1.Text);
  inc(i[1]);
  edit2.Text:=inttostr(i[1]);
end;
8
13 января 2007 года
mfender
3.5K / / 15.06.2005
А если нужно значение написать не в TEdit, а сохранить в БД??? :^))
17K
13 января 2007 года
rasl
15 / / 20.09.2006
С кликами возникает проблема...Edit не успевает отображать клики по image(Если немного быстро кликать..,то кол-во кликов не сходиться с числом в Edit.)Может это проблема Delphi?
8
14 января 2007 года
mfender
3.5K / / 15.06.2005
Цитата: rasl
С кликами возникает проблема...Edit не успевает отображать клики по image(Если немного быстро кликать..,то кол-во кликов не сходиться с числом в Edit.)Может это проблема Delphi?


Когда кликаешь быстро, обрабатывается не OnClick, а OnDblClick. Самое правильное - обрабатывать в OnMouseDown.

9.0K
14 января 2007 года
Toxin_F
93 / / 03.01.2007
Цитата: mfender
А если нужно значение написать не в TEdit, а сохранить в БД??? :^))


Поставить на форму компонент TDBEdit, с обработчиком, например, OnChange...

8
14 января 2007 года
mfender
3.5K / / 15.06.2005
Цитата: Toxin_F
Поставить на форму компонент TDBEdit, с обработчиком, например, OnChange...


Отлично! И как в TDBEdit учесть количество кликов??? В TAg? В глобальных переменных? А если каритнок сто?....

Ребята, не морочте людям голову. Гораздо проще написать наследыша, чем выдумывать всякое говно.

303
15 января 2007 года
makbeth
1.0K / / 25.11.2004
Перечитал еще раз... Люди, тема однозначно в юмор :)
Цитата:
Ребята, не морочте людям голову. Гораздо проще написать наследыша, чем выдумывать всякое говно.


Да не... погоди... Вот еще одно супер мега решение:
Предлагаю написать наследника от TImage, который будет фиксировать факт клика на картинке. Он будет создавать объект класса TImageClick (который будет однозначно идентифицироать нужный Image) и передавать его классу TImageClickSender, который будет сериализовать TImageClick в формат XML и посылать его через TCP/IP серверу. Сервер при получении такого сообщения десериализует его обратно в объект и увеличит счетчик кликов - поле БД, соответствующее картинке, на сервере БД. После этого вернет сообщение клиенту, что счетчик увеличен. Клиент получит такое сообщение классом TImageClickReceiver, который изменит соответствующим образом нужный Edit.
Преимущество такого подхода:
1. Можно иметь хоть миллион картинок.
2. Количество кликов сохраняется от запуска к запуску.
3. Можно работать через Internet.
4. Поскольку используется трехзвенка (клиент<->сервер<->сервер БД), мы получаем офигительную масштабируемость и производительность.
О как! :)

8
15 января 2007 года
mfender
3.5K / / 15.06.2005
Цитата:
Да не... погоди... Вот еще одно супер мега решение:


Тоже тема! :D

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог