Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Slika na user kontroli

[es] :: Pascal / Delphi / Kylix :: Slika na user kontroli

[ Pregleda: 1932 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 229
*.adsl.net.t-com.hr.



+2 Profil

icon Slika na user kontroli26.04.2016. u 14:03 - pre 45 meseci
Radio sam slično, ali ne znam gdje sad griješim. Treba mi na mojoj kontroli postaviti sliku.
Kad kontrolu postavim na formu i u propery dodam sliku, u design modu se vidi, u runtime ne...

Osnovni dio kontrole:
Code:

  tMyGroupButton = class(TPanel)
  private
    fPicture: TImage;
  protected
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property Picture: TImage read fPicture write fPicture;
  end;

...

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('MyControls', [tMyGroupButton]);
end;

constructor tMyGroupButton.Create(AOwner: TComponent);
begin
  inherited;
  fPicture := TImage.Create(self);
  fPicture.Parent := self;
  fPicture.Left := 20;
  fPicture.Top := 0;
  fPicture.Height := 24;
  fPicture.Width := 24;
  fPicture.Transparent := true;
  fPicture.AutoSize := true;
  fPicture.Visible := true;
end;

 
Odgovor na temu

captPicard
programer
more i planine

Član broj: 216084
Poruke: 1119



+19 Profil

icon Re: Slika na user kontroli26.04.2016. u 16:48 - pre 45 meseci
probaj za svaki slučaj
Code:
fPicture.BringToFront


Gdje zadaješ .picture property?
F
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2602



+68 Profil

icon Re: Slika na user kontroli26.04.2016. u 17:33 - pre 45 meseci
Ovako na prvi pogled i meni deluje u redu, samo proveri da li dodeljuješ sliku i da li je to ispravna slika (tipa probja sa nekom koja je skroz crvena).
 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 229
*.adsl.net.t-com.hr.



+2 Profil

icon Re: Slika na user kontroli27.04.2016. u 08:05 - pre 45 meseci
Još nešto, kad spremim pa učitam projekt, slika nestane.

Dodao sam, ali ne pomaže:

Code:

constructor tMyGroupButton.Create(AOwner: TComponent);
begin
...
   fPicture.BringToFront;
end;


Sliku dodjeljujem u design modu -> Object inspector -> Property -> Picture -> Picture

U Property-ima vidim moj published definirani property "Picture" koji ćita/piše direktno u private var "fPicture"

Kontrola je (za sada) vrlo jednostavna:
- nasljednik tPanela-a
- na noj je tImage kojem moram u design modu dodjeliti sliku

Svu "igru" koja slijedi još nisam niti počeo raditi.

Imam kontrolu koju sam ranije radio, koja doduše, koristi tBitBtn a ne tImage i s njom nisam imao tih problema. Ne vidim u kodu nešto različito zbog čega bi pamtila sliku...


 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2602



+68 Profil

icon Re: Slika na user kontroli27.04.2016. u 08:46 - pre 45 meseci
Probaj da je dodeliš iz koda, tipa učitaš neki bmp iz fajla. Ako ne pomogne, jedino da pošalješ neki primer koda.
 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 229
*.adsl.net.t-com.hr.



+2 Profil

icon Re: Slika na user kontroli27.04.2016. u 08:53 - pre 45 meseci
Moram dodjeliti sliku u design modu.
Evo cijeli kod kontrole. Tek sam ju počeo slagati.
Sada kontrola, kad ju postaviš na formu ima dva property-a: "Pictur1" i "Picture". Jedno je moja definirana klasa (što će kasnije i biti), a drugo direktno tImage koju sam dodao radi testiranja problema sa slikom.

Code:

unit MyGroupButton;

interface

uses
  System.SysUtils, System.Classes, Vcl.Controls, Vcl.ExtCtrls, Vcl.StdCtrls, Vcl.Graphics;

type
  tMyCaption = class
  
  end;

  tMyPicture=class(TPersistent)
  private
    fPicture: TImage;
    fOwner: TPersistent;
  public
    function GetOwner: TPersistent; override;
  published
    property Picture: TImage read fPicture write fPicture;  
  end;

  tMyGroupButton = class(TPanel)
  private
    fCaption: TMyCaption;
    fPicture: tMyPicture;
    fPicture1: TImage;
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure Assign(aSour: TPersistent); override;
  published
    { Published declarations }
    property Picture: tMyPicture read fPicture write fPicture;
    property Pictur1: TImage read fPicture1 write fPicture1;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('MyControls', [tMyGroupButton]);
end;     

{ tMyGroupButton }

procedure tMyGroupButton.Assign(aSour: TPersistent);
begin
  inherited;
  if aSour is tMyPicture then begin
     //fPicture.fPicture.Picture := tMyPicture(aSour).fPicture.Picture;
  end else inherited;
end;

constructor tMyGroupButton.Create(AOwner: TComponent);
begin
  inherited;
  fCaption := tMyCaption.Create;
  fPicture := tMyPicture.Create;
  fPicture.fOwner := self;
  //fPicture.fPicture.Parent := self;
  fPicture.fPicture := TImage.Create(self);
  fPicture.fPicture.Parent := self;
  fPicture.fPicture.Left := 0;
  fPicture.fPicture.Top := 0;
  fPicture.fPicture.Width := 24;
  fPicture.fPicture.Height := 24;
  fPicture.fPicture.Transparent := true;
  fPicture.fPicture.AutoSize := true;
  fPicture.fPicture.Visible := true;
  //fPicture.fPicture.BringToFront;

  fPicture1 := TImage.Create(self);
  fPicture1.Parent := self;
  fPicture1.Left := 20;
  fPicture1.Top := 0;
  fPicture1.Height := 24;
  fPicture1.Width := 24;
  fPicture1.Transparent := true;
  fPicture1.AutoSize := true;
  fPicture1.Visible := true;
  fPicture1.BringToFront;
end;                             

destructor tMyGroupButton.Destroy;
begin
  fPicture.Free;
  fPicture1.Free;
  fCaption.Free;
  inherited;
end;

{ tMyPicture }

{ tMyPicture }


function tMyPicture.GetOwner: TPersistent;
begin
   result := fOwner;
end;

end.

 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2602



+68 Profil

icon Re: Slika na user kontroli27.04.2016. u 09:09 - pre 45 meseci
Probaj kao test da to uradis i u runtimu, da bi se videlo je li problem u design time ili u samoj komponenti.
Prikaci (uz poruku kao attachment) ceo kod, i test projekat i komponentu.
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 785
*.e-info.ba.



+61 Profil

icon Re: Slika na user kontroli27.04.2016. u 09:36 - pre 45 meseci
U constructor-u treba staviti inherited; na dno procedure .

Zasto? Zato sto inherited; poziva metodu Loaded; u kojoj se izvrsava ucitavanje resursa komponenta. A posto u momentu ucitavanja resursa (znaci slika), fPicture i fPicture1 jos nisu kreirane, zato i ostanu prazne.

Pozz
 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 229
*.adsl.net.t-com.hr.



+2 Profil

icon Re: Slika na user kontroli27.04.2016. u 11:01 - pre 45 meseci
Ako stavim inherited na dno procedure, delphi kod postavljanja kontrole na formu javlja "Access violation at..."

Kako dodati attachment?
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2602



+68 Profil

icon Re: Slika na user kontroli27.04.2016. u 11:22 - pre 45 meseci
> Kako dodati attachment?

Kad pošalješ poruku, na dnu treba da bude "Upload uz poruku".
 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 229
*.adsl.net.t-com.hr.



+2 Profil

icon Re: Slika na user kontroli27.04.2016. u 11:50 - pre 45 meseci
Našao... ovo je kontrola, ostatak nije bitan - forma i na njoj postaviti kontrolu
Prikačeni fajlovi
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 785
*.e-info.ba.



+61 Profil

icon Re: Slika na user kontroli27.04.2016. u 13:20 - pre 45 meseci
Citat:
FranjoZG:
Ako stavim inherited na dno procedure, delphi kod postavljanja kontrole na formu javlja "Access violation at..."


Izvinjavam se, prevideo sam da je na novijim Delphi-jima je Form1.OldCreatingOrder postavljeno na false.

Pogledao sam malo detaljnije kod. Za pocetak, predlazem da nateras prosti TImage (fPicture1) da se moze postaviti iz desingtime-a. Za slozeniju klasu TMyPicture ide dosta vise izmena.

Pozz
 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 229
*.adsl.net.t-com.hr.



+2 Profil

icon Re: Slika na user kontroli27.04.2016. u 13:50 - pre 45 meseci
fPicture1 se može postviti u designtime-u preko property-a Picture1

klasa TMyPicture će ići kasnije kad dobijem da zapamti sliku fPicture1
 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 229
*.adsl.net.t-com.hr.



+2 Profil

icon Re: Slika na user kontroli27.04.2016. u 14:29 - pre 45 meseci
Kad sam umjesto tIamge stavtio tBitMap stvar radi, pamti sliku. Jedni što se sad treba igrati sa prikazom.
Rješit ću to tako (ako netko od vas ne pronađen rješenje za direktno učitavnje u tImage).
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 785
*.e-info.ba.



+61 Profil

icon Re: Slika na user kontroli27.04.2016. u 15:09 - pre 45 meseci
FranjoZG,

nimalo me ne cudi sto si zaglavio s ovim; toliko je toga promenjeno u novijim Delphi-jima da vise covek nije pametan. Kod koji si postavio gore (uz neke izmene doduse) bi radio glat na (recimo) D7.

Posto me je zaintrigiralo zasto gornji kod ne radi, odvojio sam malo vremena i produvao zavrzlamu (komponenti su moja strast ). U prilogu je kod koji radi, uglavio sam i TImage i tvoju klasu TMyPicture. Kljuc je u pozivanju (nove?) metode SetSubComponent(IsSubComponent: boolean), i to svuda gde treba.

Kad iskompajliras i postavis slike u komponent (postavljen na formi), pogledaj prikaz 'View Form As Text', i tek ces onda videti kakav je to pi*vajz. Ali u ObjectInspector-u to izgleda sve kako treba.
Sledi kod:

Code:

unit MyGroupButton;

interface

uses
  System.SysUtils, System.Classes, Vcl.Controls, Vcl.ExtCtrls, Vcl.StdCtrls, Vcl.Graphics;

type
  tMyPicture = class(TComponent) // zasto TComponent? zbog SetSubComponent()
  private
    fPicture: TImage;
  public
    constructor Create(aOwner: TComponent); override;
    destructor Destroy; override;
  published
    property Picture: TImage read fPicture write fPicture;
  end;

  tMyGroupButton = class(TPanel)
  private
    fPicture: TMyPicture;
    fPicture1: TImage;
  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property Picture: tMyPicture read fPicture write fPicture;
    property Picture1: TImage read fPicture1 write fPicture1;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('MyControls', [tMyGroupButton]);
end;

constructor tMyGroupButton.Create(AOwner: TComponent);
begin
  inherited;

  fPicture := tMyPicture.Create(self);
  fPicture.SetSubComponent(true);

  fPicture1 := TImage.Create(self);
  fPicture1.SetSubComponent(true);
  fPicture1.Parent := self;
  fPicture1.Left := 20;
  fPicture1.Top := 0;
  fPicture1.Height := 24;
  fPicture1.Width := 24;
  fPicture1.Transparent := true;
  fPicture1.AutoSize := true;
  fPicture1.Visible := true;
end;

destructor tMyGroupButton.Destroy;
begin
  fPicture.Free;
  fPicture1.Free;
  inherited;
end;

{ tMyPicture }

constructor tMyPicture.Create(aOwner: TComponent);
begin
  inherited;
  fPicture := TImage.Create(self);
  fPicture.SetSubComponent(true);
  fPicture.Parent := TWinControl(Owner); // ovo jeste malo nategnuto - typecast bez provere ...ali radi
  fPicture.Left := 0;
  fPicture.Top := 0;
  fPicture.Width := 24;
  fPicture.Height := 24;
  fPicture.Transparent := true;
  fPicture.AutoSize := true;
  fPicture.Visible := true;
end;

destructor tMyPicture.Destroy;
begin
  fPicture.Free;
  inherited;
end;

end.


Pozz
 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 229
*.adsl.net.t-com.hr.



+2 Profil

icon Re: Slika na user kontroli27.04.2016. u 15:36 - pre 45 meseci
Hvala, provjerti ću kako radi (sutra, dosta za danas)

Složio sam s tBitMap, radi dobro, ali ovako izbjegavam petljanje oko refresha-a kod učitavanja slike.
 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 229
*.adsl.net.t-com.hr.



+2 Profil

icon Re: Slika na user kontroli29.04.2016. u 12:26 - pre 45 meseci
Da ne otvaram novu temu, a odnosi se na istu kontrolu?

Kotrola mi je nasljednik tPanel-a, što znaći da u object inspectoru vidim sve property-e tPanela (kojih je peviše i ne želim da su svi dostupni)

Probao sam napraviti kontrolu kao nasljednika TWinControl ili TControl, a panel staviti kao atribut tako da mogu propagirati samo property-e koji mi trebaju. Kreiram ga u konstruktoru, ali se panel koji sam kreirao ne vidi na formi.


 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2602



+68 Profil

icon Re: Slika na user kontroli29.04.2016. u 13:19 - pre 45 meseci
Delphi je upravo zgodan za te namene, sve controle imaju pravu funkcionalnost u neposrednom custom parentu, za panel je to TCustomPanel, dakle nasledi od njega i onda samo ubaci u published sekciju propertije koji ti trebaju, pogledaj kako je sam TPanel deklarisan u ExtCtrls unitu.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Slika na user kontroli

[ Pregleda: 1932 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.