Anonymní profil Laz – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Laz – Programujte.comAnonymní profil Laz – Programujte.com

 

Příspěvky odeslané z IP adresy 194.213.198.–

Radkus
Delphi › Práce s vytvořenou komponentou
21. 2. 2019   #383153

Zdravím, rád bych se zeptal jak můžu dále pracovat s komponentou, kterou jsem programově vytvořil pomocí Create. Konkrétně se jedná o PairSplitter, ale samozřejmě nejen s ní.

Vytvoření: 

VAR Spliter: TPairSplitter;
...

Spliter:= TPairSplitter.Create(Self);
with Spilter do
  begin
    Parent:= PageControl1.Page[0];
    Name:= 'PairSplitter'+(IntToStr(CisloSplitter));
    Sides[0].Name:= 'PairSplitterSide'+ (IntToStr(CisloSide));
    Sides[1].Name:= 'PairSplitterSide'+ (IntToStr(CisloSide)+1);
end;
...

No a chtěl bych s touto komponentou pracovat dále. Např. změna velikosti Width a zde už mám problém. 

VAR SpilterSide: TPairSplitterSide;
...

IF FindComponent('PairSplitterSide'+ (IntToStr(CisloSide)) <> NIL THEN
   begin
     SpilterSide:= FindComponent('PairSplitterSide'+ (IntToStr(CisloSide));
       with SpilterSide do
            SpilterSide.Width:= 100;
      end;
   end;

...

Toto mi vyhodí chybu: Incompatible types: got "TComponent" expected "TPairSplitterSide".

Tak jsem zkusil jiný způsob: 

...

IF FindComponent('PairSplitterSide'+ (IntToStr(CisloSide))) <> NIL THEN
   begin       
     with FindComponent('PairSplitterSide'+ (IntToStr(CisloSide))) do
          Width:= 100;
    end;

...

Tohle mi však změní velikost celého okna, tedy Form a ne PairSplitterSide.

Bohužel zde již mé amatérské pokusy s programováním narazily na své limity, tak pokud by mi někdo odkázal poradit budu rád :).

Laz
Delphi › Instalace RichMemo v Lazarus
17. 8. 2017   #217526

Zdravím, nejde mi nainstalovat RichMemo v Lazarusu. Netušíte prosím někdo co s tím?

Překlad proběhne v pořádku ale při instalaci vyskočí chyba:

"Sestavit IDE: Exit kód 512, Chyb: 1"

"chmlangref.pas(48,6) Fatal: Nelze najít chmreader užito ChmLangRef balíčku ChmHelpPkg."

Lazarus 1.6+dfsg-1 (64bit)

FPC: 3.0.0

OS: Linux Mint 18.2

Laz
Delphi › Aktivace prvku
5. 12. 2016   #213909

#2 hlucheucho
jo to je ono. Děkuji

Laz
Delphi › Aktivace prvku
5. 12. 2016   #213903

Dobrý den,

potřeboval bych poradit jak na aktivaci prvku po zavření (skrytí) jiného.

Mám tabulku (StringGrid) ve které se po stisku klávesy (F1) "otevře okno", ve kterém se zobrazí info o vybrané buňce.

Toto "okno" je Memo u kterého mám tlačítko (Button) Zavřít. Toto se děje přes .Visible:= True. Po stisku tlačítka Zavřít se se "okno" zavře .Visible:= False.

Problém je v tom, že po této akci již StringGrid není aktivní a pro jeho aktivaci musím kliknout myší do prostoru tabulky, abych mohl pokračovat dále v práci. 

Chtěl bych se tedy zeptat, zda existuje nějaký způsob, jak programově  znovu aktivovat StringGrid po skrytí Mema a Tlačítka.

Děkuji moc

Laz
Delphi › LAZARUS: Asociace souborů s…
12. 8. 2016   #212315

Super, to je přesně ono.

Díky moc.

Ještě přidám vzorový kód kdyby tohle někdo taky řešil 

PROCEDURE TFORM1.FORMCREATE(SENDER: TOBJECT);   //procedura při vytvoření(spuštění)

BEGIN  
  
  IF ParamStr(1)<>'' THEN               //ověření jestli systém předal cestu k souboru
     SynEdit1.Lines.LoadFromFile(ParamStr(1)); //načtení souboru do editačního okna
END; 
Laz
Delphi › LAZARUS: Asociace souborů s…
11. 8. 2016   #212309

Zdravím, 

dělám si vlastní prohlížeč textových souborů a rád bych, aby se mi po poklepání na soubor v průzkumníkovi (Total commander, Salamander...) spustil program s načteným obsahem textového souboru.

Asociace souborů ve windows samozřejmě není problém, program se mi spustí, ale obsah se nenačte - okno editoru (SynEdit) je prázdné.

Nevíte někdo, jak ošetřit, aby se po spuštění programu načetl obsah souboru na který jsem kliknul?

Díky moc.

Laz
Delphi › Lazarus - StringGrid MultiSe…
29. 6. 2016   #211728

Zdravím, 

nevíte někdo jak bych mohl v Lazarusu ve StringGridu zjistit, které řádky mám vybrané při multiselectu?

POUŽITÍ: Při stisku CTRL+LTM nebo SHIFT+šipka nahorů/dolů vyberu řádky, stisknu klávesu CTRL+C pro kopírování a zde bych chtěl např. do pole, příp. i do textové proměnné uložit čísla vybraných řádků, které bych při stisku CTRL+V zkopíroval na definované místo.

Událost pro stisk klávesy samozřejmě problém není, jedná se mi pouze o to uložení čísel vybraných řádků do proměnné.

Laz
Delphi › Lazarus - chyba při krokování
11. 2. 2015   #199127

#2 miHan
Zatím je to krátké, takže dávám celý kód:

UNIT uHlavni;

{$mode objfpc}{$H+}

INTERFACE

USES
  Classes, SysUtils, FileUtil, SynEdit, SynHighlighterXML, Forms, Controls,
  Graphics, Dialogs, StdCtrls;

TYPE

  { TForm1 }

  TForm1 = CLASS(TForm)
    btnNacti: TButton;
    btnPreved: TButton;
    btnUloz: TButton;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    SynEdit1: TSynEdit;
    SynEdit2: TSynEdit;
    SynXMLSyn1: TSynXMLSyn;
    PROCEDURE btnNactiClick(Sender: TObject);
    PROCEDURE btnPrevedClick(Sender: TObject);
    PROCEDURE btnUlozClick(Sender: TObject);
    PROCEDURE FormCreate(Sender: TObject);
  PRIVATE
    { private declarations }
  PUBLIC
    { public declarations }
  END;

VAR
  Form1: TForm1;

IMPLEMENTATION

{$R *.lfm}

{ TForm1 }

//----- Spuštění programu -----
PROCEDURE TForm1.FormCreate(Sender: TObject);
BEGIN
  Synedit1.Text:= '';
  Synedit2.Text:= '';

END;

//----- TLAČÍTKO: Načti -----
PROCEDURE TForm1.btnNactiClick(Sender: TObject);
BEGIN
  IF OpenDialog1.Execute THEN
     begin
       Synedit1.Lines.LoadFromFile(OpenDialog1.FileName);
     end;
END;

//----- TLAČÍTKO: Ulož -----
PROCEDURE TForm1.btnUlozClick(Sender: TObject);
BEGIN
  IF SaveDialog1.Execute THEN
     begin
       Synedit2.Lines.SaveToFile(SaveDialog1.FileName);
     end;
END;

//----- TLAČÍTKO: Převeď -----
PROCEDURE TForm1.btnPrevedClick(Sender: TObject);
var Nacti_Radek, Poznamka, Pomocne1: String;
    Pocet_Radku, Znak, Znak1, Najdi_Konec, A: Integer;

BEGIN
  Najdi_Konec:= 0;

  FOR A:= 0 TO 150 DO  //najde konec blokku
      begin
        Nacti_Radek:= Synedit1.Lines[A];
        Znak:= POS('</Row>', Nacti_Radek);
        IF (Znak > 0) AND (Najdi_Konec = 0) THEN
           Najdi_Konec:= A +1;
      end;

  IF Najdi_Konec = 0 THEN
     EXIT;

  FOR A:= 0 TO Najdi_Konec -1 DO
      begin
        Nacti_Radek:= Synedit1.Lines[A];
        Znak:= POS('52-', Nacti_Radek);
        IF Znak > 0 THEN
           Poznamka:= (COPY(Nacti_Radek,Znak,7)) + ': ';

        Znak:= POS('html:Color=', Nacti_Radek);
        IF Znak > 0 THEN
           begin
             Znak:= POS('&#10;', Nacti_Radek);
             IF Znak > 0 THEN
                DELETE(Nacti_Radek,Znak,5);

             IF (POS('Ski', Nacti_Radek)=0) OR (POS('SKI', Nacti_Radek)=0) OR
                (POS('Ku', Nacti_Radek)=0) OR (POS('KU', Nacti_Radek)=0) OR
                (POS('ROZSAH:', Nacti_Radek)=0) THEN
                 begin
                   Znak:= POS('">', Nacti_Radek);
                   Znak1:= POS('</Font>', Nacti_Radek);
                   Pomocne1:= COPY(Nacti_Radek, Znak +1, Znak1 -1);
                   Znak:= POS('(', Pomocne1);
                   IF Znak > 1 THEN
                      begin

                      end;
                 end;
           end;
      end;
END;

END.

Odlazuji btnPrevedClick ale dělá to v kterémkoliv místě, když si dám stopku (F5 - řádek je červený) a spustím program, tak až k ní to dojede v pohodě, když však chci poté krokovat, vyskočí chybová hláška.

Zajímavé přitom je, že pokud si dám stopky na každý řádek a mačkám tlačítko spustit (F9), tak to projíždí normálně řádek po řádku a nic se neseká. Je to sice taky řešení, ale pěkně krokolomné...

Laz
Delphi › Lazarus - chyba při krokování
11. 2. 2015   #199121

Dobrý den,

při odlaďování programu v režimu krok po kroku (F8) vyskočí chyba:

Připojen obrázek.

Nevíte prosím někdo v čem je problém?

Děkuji

Laz
Delphi › Lazarus - uložení aktivního…
17. 4. 2014   #189335

Ahoj,
v programu používám PageControl s TabSheet na kterém je umístěno Memo,
po kliknutí na tlačítko vytvořím nový TabSheet s novým Memo pojmenované
TabSheet1...n a Memo1...n.
Rád bych uložil obsah aktivního memo do souboru.

Kód vypadá takto: 

procedure TfrmHlavni.ToolBtbUlozitClick(Sender: TObject);

var aktivni_memo: TMemo;
    aktivni_zalozka: TComponentName;

begin

  aktivni_zalozka:= PageControl1.ActivePage.Name;          //zjistí aktivní TabSheet
  aktivni_zalozka:= 'Memo' + (copy(aktivni_zalozka,9,5));  //aktivní memo (Memo..)

  aktivni_memo.name:= aktivni_zalozka;                     //přiřadi nazev aktivního memo do proměnné
 
  SaveDialog1.Filename:='soubor.txt';
  If SaveDialog1.Execute Then
     aktivni_memo.Lines.SaveToFile(SaveDialog1.FileName);

end;


Bohužel tento způsob nefunguje. Vypíše to chybu: Projekt vyvolal vyjímku třídy 'External: SIGSEGV'.

Nemáte s tímto nědo zkušenost, jak by se toto dalo ošetřit?

Děkuji

Laz
Delphi › Lazarus - SynMemo nastavení…
11. 4. 2014   #189167

Ahoj, chtěl bych se zeptat jak v Lazarusu u SynMemo (nebo SynEdit, případně jenom Memo) nastavit barvu pro jednotlivé slova (písmena) zvlášť bez použití Highlighteru (malé možnosti nastavení).

U Delphi je to tuším RichEdit a příkaz RichEdit.SelAttributes.Color. Existuje nějaká náhrada pro Lazarus? Použitím příkazu SynMemo.Font.Color sice barvu textu změním, ale bohužel celého textu včetně číslování řádků vlevo.

Díky moc
 

Radkus
Delphi › Událost pro nový objekt
21. 3. 2014   #188484

tak kód je zde:

unit Unit1;
{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls,
  StdCtrls;

type
  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    PageControl1: TPageControl;
    tabDrazka1: TTabSheet;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure buton (Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
    pocet: integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}
{ TForm1 }

procedure buton (Sender: TObject);
begin
  showmessage('Zpráva');
end;

procedure TForm1.Button1Click(Sender: TObject);
var newtab: TTabSheet;
    btn: TButton;
    jmenoprocedury: string;
    aaa: tobject;

begin
pocet:= pocet+1;

    newtab := TTabSheet.Create(PageControl1);
    newtab.PageControl := PageControl1;
    newtab.name := 'tabDrazka'+inttostr(pocet);
    newtab.Caption := 'Drážka '+inttostr(pocet);

    btn:= TButton.Create(newtab);
    btn.parent:= newtab;
    btn.top:= 128;
    btn.left:= 52;
    btn.height:= 25;
    btn.Width:= 75;
    btn.Caption:= 'Button' +inttostr(pocet);
    btn.Name:= 'Button' +inttostr(pocet);
    btn.OnClick:= buton;   
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   pocet:= 1;
end;

end.        
Radkus
Delphi › Jeden Form a více Unit
20. 3. 2014   #188450

tak už to funguje. Musí se vložit procedure uloz_soubor(); mezi uses a var hned na začátku ještě před implementation. Pokud se to dá jinam, vyhazuje to chyby, nebo nefunguje.

Děkuji všem za pomoc.

Radkus
Delphi › Jeden Form a více Unit
20. 3. 2014   #188447

#2 miHan
no ono je pravda, že událost a ani názvy jsem nezvolil zrovna šťastně, ale pro výsledný program je to pak nepodstatné. Vytvořil jsem totiž jen co nejjednodušší odlehčeninu, tak aby bylo jasné o co mi jde. Program ve kterém chci pak vyvolávání použít je totiž již značně velký, proto pokud něco testuji spustím si druhé okno a udělám nějakou takovouhle zjednodušeninu, ve které testuji pouze tu danou věc. Chápu, že pak zde mohlo dojít k určitému zmatení o co mi vlastně jde, omlouvám se.

Takže jde o to, abych byl schopen např. po stisku tlačítka na Form1 v události ButtonClick vyvolat proceduru umístěnou na jiné Unit, než na které je ona událost ButtonClick. Pokud tedy mám na Unit1 událost ButtonClick a na Unit2 proceduru procedure udelej_neco(), tak se tato procedura vyvolala a provedla.

Vyzkoušel jsem událost onFormShow, kterou jste radil, ale výsledek je stále stejný, tedy hláška "Identifier not found "uloz_soubor" ".

Radkus
Delphi › Událost pro nový objekt
20. 3. 2014   #188445

Děkuji za odpověď, bohužel tento způsob vyhodí chybu :

" Wrong number of parameters specified for call to "jmenoprocedury" "

Radkus
Delphi › Jeden Form a více Unit
20. 3. 2014   #188442

Zdravím,

mám v programu jeden Form s Unit1 a Unit2, chtěl bych se zeptat, jak vyvolat proceduru z Unit2 v Unit1. Zjednodušeně to vypadá takto:

Unit1:

unit Unit1;
{$mode objfpc}{$H+}
interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, StdCtrls, unit2, Graphics, Dialogs;

type
  { TForm1 }
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation
{$R *.lfm}

{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);

begin
  unit2.uloz_soubor;  
end;

end.

Unit2:  

unit Unit2;
{$mode objfpc}{$H+}

interface
uses
  Classes, SysUtils, FileUtil, Forms, StdCtrls, Controls, Graphics, Dialogs;

 var
  popis: string;

implementation
uses Unit1;

procedure uloz_soubor();
var nazev: string;
begin
  SaveDialog1.Filename:=nazev;
  if SaveDialog1.Execute then
     MemoUlozNacti.Lines.SaveToFile(SaveDialog1.FileName);
end;

end.

Při překladu mi to však vždy vyhodí chybu "Identifier not found". Nevíte někdo, jak by se dala ta procedura vyvolat?

Děkuji

Radkus
Delphi › Událost pro nový objekt
7. 3. 2014   #187948

Dobrý den,

ve svém programu používám "PageControl" s jednou záložkou "TabSheet", na které je umístěno tlačítko "Button", po stisknutí tohoto tlačítka se vytvoří vždy nová záložka s novým tlačítkem, které je samozřejmě bez události (po kliknutí na něj se nic nestane). Rád bych se zeptal, jak přidám novou událost (proceduru) pro každé toto nově vytvořené tlačítko (pokaždé jinou událost pro každé tlačítko). Záložku a tlačítko vytvářím takto:

procedure TForm1.Button1Click(Sender: TObject);
var newtab: TTabSheet;
    btn: TButton;

begin
pocet:= pocet+1;  //public proměnná

    newtab := TTabSheet.Create(PageControl1);
    newtab.PageControl := PageControl1;
    newtab.name := 'tab'+inttostr(pocet);
    newtab.Caption := 'Tab '+inttostr(pocet);

    btn:= TButton.Create(newtab);
    btn.parent:= newtab;
    btn.top:= 128;
    btn.left:= 52;
    btn.height:= 25;
    btn.Width:= 75;
    btn.Caption:= 'Button' +inttostr(pocet) ;
    btn.Name:= 'Button' +inttostr(pocet) ;

end;

děkuji.

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý