IT NEWS PC REVUE PC FORUM FreeBSDInternet time: @266
Obsah fóra
Pravidlá  •  Kontakt  •  Prihlásenie  •  Registrácia

Ako zvládnuť účtovníctvo?

Vyskúšajte ekonomický software KROS, pomôže Vám. Vyskúšajte demo zadarmo! www.kros.sk

Dala som si poradiť

O moje peniaze je postarané. A o vaše? www.partnersgroup.sk

Zbavte sa viazanosti

Za Samsung Galaxy Ace so zlatým O2 Paušálom zaplatíte teraz 12 €! pausal.o2.sk

PORFIX: Stavebný materiál

Materiál pre váš nový dom. Unikátne stavebné výrobky Porfix. www.Porfix.sk

Často Vám opúchajú nohy?

Skúste DetoxiPan patentovaný japonský výrobok - testovaný a certifikovaný. www.detoxipan.sk

MDI a kreslenie

Zaslať odpoveď
AutorSpráva
jasug
Užívateľ
Užívateľ

Založený: 05.09.2008
Príspevky: 47

PríspevokZaslal: So 09.04.11 4:46Odpovedať s citátomNávrat hore

Zdravím,
v menšej aplikácii v D6 kachličkujem pozadie formu, ktorý má FormStyle fsNormal, nižšie uvedenou procedúrou zavesenou na OnPaint . Podobný postup som zvolil aj v aplikácii kde využívam MDI okná, FormStyle formulárov je fsMDIForm a fsMDIChild, uvedená procedúra sa vykoná ale bez výsledku, tzn. že formuláre nie sú vykachličkované. Tento pokus s MDI je prvý a neviem, kde robím chybu alebo ako mám pristupovať k MDI formom. Podľa helpov som našiel iba rozdiel vo vytváraní a zatváraní formov.
Vďaka za informácie a pomoc.



kód:

// ............................................................................
procedure Kresli_pozadie_formu(Sender: TObject);

var
    x, y: Integer;

begin
    if (BitMapPozadie.Width > 0) and (BitMapPozadie.Height > 0) then
       begin
         y := 0;
         while y < (Sender as TForm).Height do
            begin
               x := 0;
               while x < (Sender as TForm).Width do
                  begin
                     (Sender as TForm).Canvas.Draw(x, y, BitMapPozadie);
                      x := x + BitMapPozadie.Width;
                  end;
               y := y + BitMapPozadie.Height;
            end;
       end;
end;
Zobraziť informácie o autoroviOdoslať súkromnú správu
coldak
Skúsený užívateľ
Skúsený užívateľ

Založený: 29.10.2008
Príspevky: 936

PríspevokZaslal: So 09.04.11 9:12Odpovedať s citátomNávrat hore

pri tej mdi aplikacii ostava tform alebo je tam uz iny nazov triedy ?
Zobraziť informácie o autoroviOdoslať súkromnú správu
Fico
Skúsený užívateľ
Skúsený užívateľ

Založený: 11.01.2009
Príspevky: 1052

PríspevokZaslal: So 09.04.11 9:13Odpovedať s citátomNávrat hore

Nieco musis robit zle, lebo ja som skusil tvoj postup a mne to funguje:


Napis presnejsi postup, ako si to robil pre MDI formulare, ked ti to nevykresluje.
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
jasug
Užívateľ
Užívateľ

Založený: 05.09.2008
Príspevky: 47

PríspevokZaslal: So 09.04.11 10:30Odpovedať s citátomNávrat hore

Zdravím,
zasielam unit aplikácie, kde robím kachličkovanie.Ak nastavím FormStyle na fsNormal tak všetko pracuje ako má, ale ak zmením na fsMDIForm, tak vykresli form bez vykachličkovania. A ešte som prišiel na to, že keď dám na form Label tak, mi je nezobrazí ale pri fsNormal áno. Niečo robím zle, ale neviem prísť na to čo a kde. Vďaka Vám.

kód:


unit Kopirovanie_suborov;
{
 Formular  Form_vyber_suborov je MDI

}

interface

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

type
  TMainForm = class(TForm)
    btKopiruj: TButton;
    btVyber_suborov: TButton;
    btVyber_adresara: TButton;
    lbxZoznam_suborov: TListBox;
    Label1: TLabel;
    btKoniec: TButton;
    procedure FormCreate(Sender: TObject);
    procedure btVyber_suborovClick(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure btKoniecClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


procedure Kresli_pozadie_formu(Sender: TObject);

var
  MainForm: TMainForm;
  BitMapPozadie: TBitmap;    // bitmapa pozadia formulara

implementation

uses Vyber_suborov;


{$R *.DFM}


// ........................................................................
procedure TMainForm.FormCreate(Sender: TObject);
var
   Subor_bmp : String;
begin


// urcenie cesty podla umiestnenia exe suboru
   Subor_bmp := ExtractFilePath(Application.ExeName)+ 'bor6.bmp';

// nacitanie bitmapy pozadie ak je pritomny subor bor6.bmp
   BitmapPozadie := TBitmap.Create;
   if FileExists(Subor_bmp) then
      begin
         BitmapPozadie.LoadFromFile(Subor_bmp);
      end
   else
      Application.MessageBox(PChar('Neexistuje súbor ' + Subor_bmp + ' '),
            'Neprítomný súbor !! ', mb_OK);
end;

// ...........................................................................
procedure TMainForm.btVyber_suborovClick(Sender: TObject);
begin
    if Form_vyber_suborov = nil then
       Form_vyber_suborov:=TForm_vyber_suborov.Create(self);

    with Form_vyber_suborov do
       begin
            Left:=MainForm.Left + 30;
            Top:=MainForm.Top - 165;
            Height:= 300;
            Width := 580;
            Show;
       end;

end;

// ............................................................................
procedure Kresli_pozadie_formu(Sender: TObject);

var
    x, y: Integer;

begin
    if (BitMapPozadie.Width > 0) and (BitMapPozadie.Height > 0) then
       begin
         y := 0;
         while y < (Sender as TForm).Height do
            begin
               x := 0;
               while x < (Sender as TForm).Width do
                  begin
                     (Sender as TForm).Canvas.Draw(x, y, BitMapPozadie);
                      x := x + BitMapPozadie.Width;
                  end;
               y := y + BitMapPozadie.Height;
            end;
       end;
end;

// .........................................................................
procedure TMainForm.FormPaint(Sender: TObject);
begin
   Kresli_pozadie_formu(Sender);
end;


// .........................................................................
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   BitmapPozadie.Free;
end;

// ...........................................................................
procedure TMainForm.btKoniecClick(Sender: TObject);
begin
   Close;
end;

end.


// Kod patri do [code]! Ďuri
Zobraziť informácie o autoroviOdoslať súkromnú správu
Fico
Skúsený užívateľ
Skúsený užívateľ

Založený: 11.01.2009
Príspevky: 1052

PríspevokZaslal: So 09.04.11 11:27Odpovedať s citátomNávrat hore

Mne to opat ide vsetko spravne, aj pre fsNormal aj pre fsMDIForm. Pridal som na from vsetky ovladacie prvky, pomenil niektore nazvy aby to slo skompilovat a vsetko sa vykresli. Skusal som to v Delphi 7, tak neviem, ci to ma nejaky dopad. Skus si vytvorit novy projekt a v nom sprav iba jednu jedinu funkciu na to kreslenie a v nej skus, ci to pojde. Ak nie, tak s tym asi nic nespravis. Ak pojde, tak chyba bude niekde v tvojom postupe.
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
jasug
Užívateľ
Užívateľ

Založený: 05.09.2008
Príspevky: 47

PríspevokZaslal: Ne 10.04.11 9:27Odpovedať s citátomNávrat hore

Vďaka za Váš čas, pôvodnú aplikáciu som vytvoril v D5 a tak som aj MDI robil v D5, dal som to D6 a už to pracuje ako má. Ale mal by som otázku : potreboval by som v aplikácii kde je jeden MDIForm a štyri dcérske MDIChildFormy aktualizovať komponenty v dcérskych formoch po nejakej udalosti, napr. v MDIChildForm2 vznikne OnClick na btButton2 a v tejto metóde chcem zmeniť Label3.Caption na MDICHildForm3. Zatiaľ sa mi to vôbec nedarí, stačí mi kopnutie ako na to. Vďaka.
Zobraziť informácie o autoroviOdoslať súkromnú správu
Fico
Skúsený užívateľ
Skúsený užívateľ

Založený: 11.01.2009
Príspevky: 1052

PríspevokZaslal: Ne 10.04.11 9:57Odpovedať s citátomNávrat hore

Staci pripojit unit, v ktorom je deklarovany form, s ktorym chces pracovat a potom pristupujes normalne k jeho clesnkym datam. Priklad: Sme v unit2 ( form2 - child form ) a chceme zmenit text vo form3, takisto je child. Potom treba pridat do uses Unit3, lebo tam je deklarovana trieda TForm3. Ale pozor, nepridavaj ho do uses v interface ale do uses v implementation, pretoze keby si pridal aj v unite3 unit2, neskompilovalo by to, lebo takto vznikol cyklicky odkaz. Takze ukazka:

Unit2

kód:
implementation

{$R *.dfm}

uses Unit3;

procedure TForm2.Button1Click(Sender: TObject);
begin

  // zmeni text vo Form3, ktory ma formStyle fsMDIChild
  Form3.Label1.Caption := 'Zmena textu';

end;


Unit3

kód:
implementation

{$R *.dfm}

uses Unit2;

procedure TForm3.Button1Click(Sender: TObject);
begin

  // zmeni text vo Form2, ktory ma formStyle fsMDIChild
  Form2.Label1.Caption := 'zmena textu';

end;
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
jasug
Užívateľ
Užívateľ

Založený: 05.09.2008
Príspevky: 47

PríspevokZaslal: Ne 10.04.11 10:21Odpovedať s citátomNávrat hore

Zdravím,
myslím že to robím podobne, ibaže mne to nefunguje.
Uvádzam testovací kód, ktorý mi nefunguje tzn. po OnClick neprepíše Label1.Caption.
Vďaka.
kód:
unit Unit1;

interface

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

type
  TMainForm = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

uses Unit2;

{$R *.dfm}

procedure TMainForm.Button1Click(Sender: TObject);
begin
    if Form2 = nil then
       Form2:=TForm2.Create(self);

    with Form2 do
       begin
            Left:=MainForm.Left + 60;
            Top:=MainForm.Top - 145;
            Height:= 300;
            Width := 580;
            Show;
       end;

end;

end.



unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

uses Unit1;

{$R *.dfm}


procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
   MainForm.Label1.Visible := true;
   MainForm.Label1.Caption :='visible';
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
//   MainForm.Label1.Visible := false;
      MainForm.Label1.Caption :='unvisible'
end;

procedure TForm2.FormDestroy(Sender: TObject);
begin
   Form2 := nil;
end;

end.
Zobraziť informácie o autoroviOdoslať súkromnú správu
Fico
Skúsený užívateľ
Skúsený užívateľ

Založený: 11.01.2009
Príspevky: 1052

PríspevokZaslal: Ne 10.04.11 10:31Odpovedať s citátomNávrat hore

Opat mi to funguje ( aj ako klasicky form, aj ako MDI form ). Aku verziu Delphi to pouzivas?
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
jasug
Užívateľ
Užívateľ

Založený: 05.09.2008
Príspevky: 47

PríspevokZaslal: Ne 10.04.11 12:56Odpovedať s citátomNávrat hore

Na tento testovací program som použil D6 Enterprise.
Zobraziť informácie o autoroviOdoslať súkromnú správu
Zobraziť príspevky z predchádzajúcich:    
Zaslať odpoveď
Nemôžete pridávať nové témy do tohto fóra.
Nemôžete odpovedať na témy v tomto fóre.
Nemôžete upravovať svoje príspevky v tomto fóre.
Nemôžete mazať svoje príspevky v tomto fóre.
Nemôžete hlasovať v tomto fóre.

Powered by phpBB 2.x.x © 2005 - 2012 PCforum, webhosting by WebSupport, edited by JanoF

SEO - optimalizácia pre vyhľadávače

Freebsd