Poslední příspěvky

Stran: 1 [2] 3 4 ... 10
11
Obecné / Re:Text vyplněný vzorkem
« Poslední příspěvek od oxo kdy 20-10-2017, 18:08:42 »
12
Obecné / Re:COM klient ve vlákně
« Poslední příspěvek od Morrison kdy 20-10-2017, 17:53:00 »
Delfin: jednoduše popsáno, snažím se rozjet TOpcSimpleClient ve vlákně. Zkusil jsem i TVSC (VerySimpleClient z unity prOpcVSC.pas) a opět končím na "EIntfCastError: Interface not supported". Příklady fungují bez problému, protože tam je vše vždy v hlavním vlákně aplikace. Kdyby connectnutí k serveru netrvalo občas tak hrozně dlouho, klidně bych to taky nechal ve hlavním vlákně, ale občas to blokuje i desítky sekund.

Slappy: CoInitializeEx funguje z mého omezeného pohledu stejně jako obyč. CoInitialize. Dle MSDN zhruba chápu, že s COINIT_MULTITHREADED sdílejí všechna vlákna stejný apartment, ale to bohužel neřeší výše uvedený problém s nepodporovaným rozhraním.

trochu OT: Stejně je naprosto úžasný, jak tady na delphi.cz člověk prakticky vždy najde odezvu ostatních a vždy cítí snahu ostatních mu pomoci.
13
Obecné / Re:COM klient ve vlákně
« Poslední příspěvek od Slappy kdy 20-10-2017, 17:29:36 »
Myslím, že pro každé vlákno a COM musíš volat Coinitialize

Presnejsie
Kód: [Vybrat]
CoInitializeEx(nil, COINIT_MULTITHREADED);
14
Obecné / Re:COM klient ve vlákně
« Poslední příspěvek od Delfin kdy 20-10-2017, 17:15:18 »
O jaky kod se jedna? Nektery z prikladu?
15
Obecné / Re:COM klient ve vlákně
« Poslední příspěvek od Morrison kdy 20-10-2017, 16:34:35 »
Ano, to musím. Bez toho bych neudělal ani CreateRemoteComObject()
Nicméně tam musí být ještě nejaká zrada. Fakt nechápu, proč to ve vedlejším vlákně nezná nepodporuje rozhraní, které v hlavním vlákně nedělá problém.
16
Obecné / Text vyplněný vzorkem
« Poslední příspěvek od JaroB kdy 20-10-2017, 15:25:57 »
Ahoj,
potřeboval jsem nějaký jednoduchý text vyplnit vzorkem a zkoušel jsem to pomocí regionu.
Jen jestli na to nejdu špatně, vyplňuje se mi pozadí místo textu, nefunguje to prostě jak chci, viz příkladová procedura (je to jen studie). Tak se chci zeptat, jestli je tohle správný způsob. Děkuji.

Kód: Delphi [Vybrat]
  1. procedure Get_Concept_Bitmap(const aCaption: string);
  2. var
  3.   B: TBitmap;
  4.   Rgn: HRGN;
  5.   FntLogRec: TLogFont;
  6. begin
  7.   B := TBitmap.Create;
  8.   try
  9.     B.Canvas.Font.Name := 'Arial Narrow';
  10.     B.Canvas.Font.Color := clBlack;
  11.     B.Canvas.Font.Size := 120;
  12.     B.Width := B.Canvas.TextWidth(aCaption);
  13.     B.Height := B.Canvas.TextHeight(aCaption);
  14.     B.Canvas.Brush.Style := bsSolid;
  15.     B.Canvas.Brush.Color := clWhite;
  16.     B.Canvas.FillRect(Rect(0, 0, B.Width, B.Height));
  17.  
  18.     if BeginPath(B.Canvas.Handle) then
  19.     try
  20.       B.Canvas.TextOut(0, 0, aCaption);
  21.       //B.Canvas.TextRect(Rect(0, 0, Width, Height), 0, 0, aCaption);
  22.     finally
  23.       EndPath(B.Canvas.Handle);
  24.     end;
  25.     //StrokePath(B.Canvas.Handle); udela jen obrys
  26.     //StrokeAndFillPath(B.Canvas.Handle);
  27.     SetBkMode(B.Canvas.Handle, TRANSPARENT);
  28.     {region}
  29.     Rgn := PathToRegion(B.Canvas.Handle);
  30.     try
  31.       {reinvert}
  32.       //if CanBeInvert then InvertRgn(B.Canvas.Handle, Rgn);
  33.       {filling}
  34.       B.Canvas.Brush.Color := clSilver;
  35.       B.Canvas.Brush.Style := bsDiagCross;
  36.       FillRgn(B.Canvas.Handle, Rgn, B.Canvas.Brush.Handle);
  37.       B.Canvas.Brush.Color := clBlack;
  38.       B.Canvas.Brush.Style := bsSolid;
  39.       FrameRgn(B.Canvas.Handle, Rgn, B.Canvas.Brush.Handle, 1, 1);
  40.     finally
  41.       DeleteObject(Rgn);
  42.     end;
  43.  
  44.     B.SaveToFile('c:\concept.bmp'); //pro kontrolu uložená bitmapa
  45.   finally
  46.     B.Free
  47.   end;
  48. end;
  49.  
17
Obecné / Re:COM klient ve vlákně
« Poslední příspěvek od Radek Červinka kdy 20-10-2017, 15:05:27 »
Myslím, že pro každé vlákno a COM musíš volat Coinitialize
18
Obecné / COM klient ve vlákně
« Poslední příspěvek od Morrison kdy 20-10-2017, 14:56:27 »
Zdravím vespolek.
Nevíte někdo, prosím, jaký je rozdíl při vytvoření COM objektu v hlavním vlákně aplikace a při vytvoření ve vedlejším vlákně? Hlavně z hlediska registrace rozhraní.
Stáhl jsem si OPC klienta pro Delphi ve formě nevizuální komponenty (https://github.com/engycz/propc) a když ho dám do hlavního vlákna, tak všechno chodí v pohodě. Když ale tuto komponentu vytvořím ve vedlejším vlákně, narážím na spoustu problémů. S čím zatím nedokážu hnout je, že při volání
Kód: [Vybrat]
with XX as IOpcSyncIO do... mi to hodí výjimku "Interface not supported". Přitom z hlavního vlákna není problém.
19
Obecné / Re:TCustomForm a MDI
« Poslední příspěvek od xnukes kdy 19-10-2017, 11:38:53 »
Jenom doplním:

A Tak jsem si zavedl nějáký TBaseForm ktery dedi od TCustomForm.

Od TCustomForm (normální) formuláře nedědit, vždycky od TForm!!!

Děkuji za informaci :) Možná i tímto to bylo. Nicméně, udělal jsem to tak jak mi psal Delfinek a už mi to dělá přesně to co potřebuji :D Sice jsem chtěl vynechat Runtime Designer , ale když nad tím přemýšlím tak je to asi lepší :) Díky vám :)
20
Obecné / Re:TCustomForm a MDI
« Poslední příspěvek od oxo kdy 19-10-2017, 11:19:48 »
Jenom doplním:

A Tak jsem si zavedl nějáký TBaseForm ktery dedi od TCustomForm.

Od TCustomForm (normální) formuláře nedědit, vždycky od TForm!!!
Stran: 1 [2] 3 4 ... 10