[ Príspevkov: 10 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.09.08
Prihlásený: 11.11.22
Príspevky: 69
Témy: 37 | 37
NapísalOffline : 09.04.2011 4:46 | MDI a kreslenie

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;


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2 | 2
NapísalOffline : 09.04.2011 9:12 | MDI a kreslenie

pri tej mdi aplikacii ostava tform alebo je tam uz iny nazov triedy ?


Offline

Skúsený užívateľ
Skúsený užívateľ
MDI a kreslenie

Registrovaný: 11.01.09
Prihlásený: 25.04.26
Príspevky: 1399
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOffline : 09.04.2011 9:13 | MDI a kreslenie

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

Napis presnejsi postup, ako si to robil pre MDI formulare, ked ti to nevykresluje.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.09.08
Prihlásený: 11.11.22
Príspevky: 69
Témy: 37 | 37
Napísal autor témyOffline : 09.04.2011 10:30 | MDI a kreslenie

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


Offline

Skúsený užívateľ
Skúsený užívateľ
MDI a kreslenie

Registrovaný: 11.01.09
Prihlásený: 25.04.26
Príspevky: 1399
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOffline : 09.04.2011 11:27 | MDI a kreslenie

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.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.09.08
Prihlásený: 11.11.22
Príspevky: 69
Témy: 37 | 37
Napísal autor témyOffline : 10.04.2011 9:27 | MDI a kreslenie

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.


Offline

Skúsený užívateľ
Skúsený užívateľ
MDI a kreslenie

Registrovaný: 11.01.09
Prihlásený: 25.04.26
Príspevky: 1399
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOffline : 10.04.2011 9:57 | MDI a kreslenie

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;


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.09.08
Prihlásený: 11.11.22
Príspevky: 69
Témy: 37 | 37
Napísal autor témyOffline : 10.04.2011 10:21 | MDI a kreslenie

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.


Offline

Skúsený užívateľ
Skúsený užívateľ
MDI a kreslenie

Registrovaný: 11.01.09
Prihlásený: 25.04.26
Príspevky: 1399
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOffline : 10.04.2011 10:31 | MDI a kreslenie

Opat mi to funguje :) ( aj ako klasicky form, aj ako MDI form ). Aku verziu Delphi to pouzivas?


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.09.08
Prihlásený: 11.11.22
Príspevky: 69
Témy: 37 | 37
Napísal autor témyOffline : 10.04.2011 12:56 | MDI a kreslenie

Na tento testovací program som použil D6 Enterprise.


 [ Príspevkov: 10 ] 


MDI a kreslenie



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Kreslenie

v Grafické programy

0

1407

15.06.2007 20:20

petiktt

V tomto fóre nie sú ďalšie neprečítané témy.

Kreslenie rukou

v Diskusia

21

3802

24.12.2007 23:42

qacer

V tomto fóre nie sú ďalšie neprečítané témy.

program na kreslenie

v Grafické programy

3

22293

29.05.2007 22:40

Deiky

V tomto fóre nie sú ďalšie neprečítané témy.

Kreslenie na PC

v Krčma

10

2132

18.01.2010 18:53

Dany

V tomto fóre nie sú ďalšie neprečítané témy.

tablet na kreslenie

v Prenosné zariadenia

0

347

30.11.2013 11:10

rybicka

V tomto fóre nie sú ďalšie neprečítané témy.

Tablet na kreslenie

v Prenosné zariadenia

3

720

26.05.2012 0:30

89Aquarius

V tomto fóre nie sú ďalšie neprečítané témy.

Kreslenie v pc

v Grafické programy

4

2576

05.01.2011 23:50

Cako_SK

V tomto fóre nie sú ďalšie neprečítané témy.

Java - kreslenie ciary mysou

v Backend

2

860

05.12.2010 10:04

zipper

V tomto fóre nie sú ďalšie neprečítané témy.

Java - kreslenie do Canvasa

v Backend

3

1176

12.01.2010 11:38

futre

V tomto fóre nie sú ďalšie neprečítané témy.

.:::Kreslenie perokresba, ceruzky atd.:::.

v Diskusia

11

2326

16.08.2009 8:29

reDo

V tomto fóre nie sú ďalšie neprečítané témy.

program na kreslenie schem

v Elektronika

7

6864

23.05.2006 19:16

pavlko

V tomto fóre nie sú ďalšie neprečítané témy.

Grafický tablet na kreslenie

v Ostatné

2

2842

08.04.2011 16:50

PaliMajy

V tomto fóre nie sú ďalšie neprečítané témy.

Lepsi program na kreslenie

v Grafické programy

17

2501

11.02.2010 18:55

iop

V tomto fóre nie sú ďalšie neprečítané témy.

program na kreslenie pismenami

v Grafické programy

2

2140

06.10.2009 18:33

reDo

V tomto fóre nie sú ďalšie neprečítané témy.

Robite nejake umenie? (hudba/kreslenie....)

[ Choď na stránku:Choď na stránku: 1 ... 17, 18, 19 ]

v Diskusia

553

20822

24.07.2016 12:12

haffen

Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie.

PROGRAM NA kreslenie do videa

v Video programy

14

1867

07.03.2011 13:55

ac.milan



© 2005 - 2026 PCforum, edited by JanoF