Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ 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
Príspevok NapísalOffline : 09.04.2011 4:46

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
Príspevok NapísalOffline : 09.04.2011 9:12

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ý: 18.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 09.04.2011 9:13

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
Príspevok Napísal autor témyOffline : 09.04.2011 10:30

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ý: 18.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 09.04.2011 11:27

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
Príspevok Napísal autor témyOffline : 10.04.2011 9:27

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ý: 18.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 10.04.2011 9:57

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
Príspevok Napísal autor témyOffline : 10.04.2011 10:21

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ý: 18.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 10.04.2011 10:31

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
Príspevok Napísal autor témyOffline : 10.04.2011 12:56

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


Odpovedať na tému [ Príspevkov: 10 ] 


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

1320

15.06.2007 20:20

petiktt Zobrazenie posledných príspevkov

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

v Voľný čas a hobby

21

3693

24.12.2007 23:42

qacer Zobrazenie posledných príspevkov

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

v Mobilné zariadenia

3

651

26.05.2012 0:30

89Aquarius Zobrazenie posledných príspevkov

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

v Grafické programy

4

2473

05.01.2011 23:50

Cako_SK Zobrazenie posledných príspevkov

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

v Grafické programy

3

22204

29.05.2007 22:40

Deiky Zobrazenie posledných príspevkov

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

v Krčma

10

2042

18.01.2010 18:53

Dany Zobrazenie posledných príspevkov

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

v Mobilné zariadenia

0

285

30.11.2013 11:10

rybicka Zobrazenie posledných príspevkov

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

v Elektronika

7

6749

23.05.2006 19:16

pavlko Zobrazenie posledných príspevkov

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

v Ostatné

2

2730

08.04.2011 16:50

PaliMajy Zobrazenie posledných príspevkov

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

v Grafické programy

17

2391

11.02.2010 18:55

iop Zobrazenie posledných príspevkov

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

v Grafické programy

2

2058

06.10.2009 18:33

reDo Zobrazenie posledných príspevkov

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

v Assembler, C, C++, Pascal, Java

2

772

05.12.2010 10:04

zipper Zobrazenie posledných príspevkov

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

v Assembler, C, C++, Pascal, Java

3

1099

12.01.2010 11:38

futre Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. .:::Kreslenie perokresba, ceruzky atd.:::.

v Voľný čas a hobby

11

2240

16.08.2009 8:29

reDo Zobrazenie posledných príspevkov

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

v Grafické karty

3

434

09.04.2010 16:34

percussor Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Program na kreslenie postáv atď.

v Grafické programy

15

2839

28.09.2018 16:59

Juryoku Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
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

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra