Avatar billede anold Nybegynder
03. januar 2000 - 12:01 Der er 11 kommentarer og
1 løsning

Brug af samme procedure

Er der en der kan vise mig hvordan flere image kan bruge samme procedure

F.eks. en MouseDown + MouseMove + MouseUp Procedure


Avatar billede gusse Nybegynder
03. januar 2000 - 12:16 #1
unit mmimage;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls;

type
  tmmimage = class(timage)
  private
    FPictureChange : TPicture;
    FOldPicture : TPicture;
    FOnProgress: TProgressEvent;
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
    procedure SetPicture(Value: TPicture);
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property PictureChange  : TPicture Read FpictureChange write SetPicture;
    { Published declarations }
  end;

procedure Register;

implementation


constructor TMMImage.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ControlStyle := ControlStyle + [csReplicatable];
  FPictureChange := TPicture.Create;
  FOldPicture:=TPicture.Create;
end;

destructor TMMImage.Destroy;
begin
  FPictureChange.Free;
  FOldPicture.Free;
  inherited Destroy;
end;

procedure TMMImage.SetPicture(Value: TPicture);
begin
  FPictureChange.Assign(Value);
end;

procedure TMMImage.CMMouseEnter(var Message: TMessage);
begin
  //First load save old picture
  FOldPicture.Assign(picture);
  //Then assign new picture
  picture.Assign(FPictureChange);
end;

procedure TMMImage.CMMouseLeave(var Message: TMessage);
begin
  //Restore old picture
  Picture.assign(FOldPicture);
end;

procedure Register;
begin
  RegisterComponents('GUSSE', [TmmImage]);
end;

end.
Avatar billede snorga Nybegynder
03. januar 2000 - 13:58 #2
Du laver de events de alle skal have først.
Så vælger du alle billederne, og sætter deres onXXevent til den der passer til.
Avatar billede sjensen Nybegynder
03. januar 2000 - 14:03 #3
Gusse> det ser rigtigt nok ud, men jeg tror ikke helt det var det der blev spurgt om.

Sådan:

For en af de images du har på formen sætter du de 3 events op. D.v.s. at du vil have 3 procedurer:

procedure form1.mousedown(sender : tobject);

procedure form1.mouseup(sender : tobject);

procedure form1.mousemove(sender : tobject);
 
Derefter sætter du de tilsvarende events for alle de andre images til at pege på de samme events, d.v.s. at alle images har en onmousedown event der peger på form1.mousedown proceduren.

Du har nu 2 muligheder:

Du kan bruge
if activecontrol = {imagenavn} then
begin
end;

for hver muligt image hvilket vil sige at du får en if/then struktur for hvert image, eller du kan bruge dette:

(sender as TImage).{property/metode} := bla bla

ex. hvis du vil sætte det image musen peger på enabled ville du skrive:

(sender as TImage).enabled := true;

Når du anvender (sender as xxx) arbejder du med det pågældende object direkte uden nødvendigvis at kende navnet.

Jeg håber at det var det du mente (ellers var jeg måske for hurtig med min kommentar til Gusse)

sjensen
Avatar billede delphi Nybegynder
03. januar 2000 - 14:04 #4
Kig lige forbi eller send en Email - jeg tror jeg ved hvad det er du søger.

NiP
Avatar billede gusse Nybegynder
03. januar 2000 - 14:07 #5
øhh jeg kunne ikke helt forstå spørgsmålet, så jeg gættede :-), men du har da nok ret nu når jeg lige for læst det igen
Avatar billede gusse Nybegynder
03. januar 2000 - 14:10 #6
delphi ->

hvor skal han kigge

og !!! skal jeg kalde dig pro/interprise eller bare standard :-))
Avatar billede delphi Nybegynder
03. januar 2000 - 15:00 #7
Anders (Anold - spørg mig ikke hvorfor!) er en arbejdskollega - og iøvrigt også den person der fortalte mig om dette så udemærkede sted.


NiP

Ps: Jeg er gennemført pro...
Avatar billede gusse Nybegynder
03. januar 2000 - 15:07 #8
nåååååeeeee a(jeg) bet(d)re fo(r)stå :)

Ja det er faktisk et udemærket sted. Her er ikke så meget lo.. som i ng´erne..
Avatar billede anold Nybegynder
04. januar 2000 - 06:47 #9
Hej sjensen

det er lige netop det du beskriver som jeg kan bruge

kan du ikke vise mig et eksempel hvor du bruger (Sender as TImage)
Avatar billede delphi Nybegynder
04. januar 2000 - 09:23 #10
Det fik du da af mig igår - Før SJensen havde lavet sit indlæg....

NiP
Avatar billede sjensen Nybegynder
04. januar 2000 - 14:45 #11
Her er der et eksempel i Delphi 4. Jeg håber du kan bruge det. Det er i øvrigt gyldig for D3 og D5 også.

PAS-filen:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Label1: TLabel;
    Image4: TImage;
    Image5: TImage;
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  image4.picture.Assign((Sender as TImage).picture);
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  label1.Caption := (Sender as TImage).Name;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  image5.picture.Assign((Sender as TImage).picture);
end;

end.

DFM-filen:
object Form1: TForm1
  Left = 200
  Top = 107
  Width = 696
  Height = 480
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Image1: TImage
    Left = 128
    Top = 80
    Width = 105
    Height = 105
    OnMouseDown = Image1MouseDown
    OnMouseMove = Image1MouseMove
    OnMouseUp = Image1MouseUp
  end
  object Image2: TImage
    Left = 248
    Top = 80
    Width = 105
    Height = 105
    OnMouseDown = Image1MouseDown
    OnMouseMove = Image1MouseMove
    OnMouseUp = Image1MouseUp
  end
  object Image3: TImage
    Left = 368
    Top = 80
    Width = 105
    Height = 105
    OnMouseDown = Image1MouseDown
    OnMouseMove = Image1MouseMove
    OnMouseUp = Image1MouseUp
  end
  object Label1: TLabel
    Left = 128
    Top = 216
    Width = 32
    Height = 13
    Caption = 'Label1'
  end
  object Image4: TImage
    Left = 144
    Top = 248
    Width = 105
    Height = 105
  end
  object Image5: TImage
    Left = 304
    Top = 248
    Width = 105
    Height = 105
  end
end

NB! Af hensyn til eksemplets størrelse har jeg ikke billeder med i de anvendte images. Fyld selv en bitmap ind i Picture-property for de 3 images: Image1, Image2 og Image3. Når du fører musen over de 3 billeder vises imagenavnet i label1 og ved tryk-ned sættes billedet fra det image musen peger på ind i Image4 og når museknappen slippen (mouseUp) sætte billedet ind i Image5.

Enkelt og simpelt.

Og arnold>Hvis du har fået noget af Delphi der virker og som du er tilfreds med, også selvom det var privat (kollegaer) så må du for min skyld gerne give ham points'ne. Jeg kan godt overleve alligevel.

sjensen
Avatar billede delphi Nybegynder
04. januar 2000 - 16:13 #12
SJensen> Jeg er nu mere forundret over hvorfor han spørger efter noget, som han så vidt jeg ved allerede er klar over.  Nu er der godt nok langt over til hvor han sidder (Danfoss er ikke et helt lille sted..), men jeg vil lige fange ham i morgen (Nu er du advaret Anold!).  Efter kl 14 er han smuttet.

Anold har iøvrigt haft en del spørgsmål i dette forum på det sidste.  De har alle haft relation til dynamisk oprettede images.  Han er i det private igang med et program til editering og udprintning af CD-cover labels.  Det ser udtil at blive et rigtigt sødt program - Jeg glæder mig ihvertfald til at se det når det er færdigt.

NiP
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
Kurser inden for grundlæggende programmering

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